Jquery, ajax,通过id获取元素

Jquery, ajax, getting an element by id

本文关键字:获取 元素 id 通过 ajax Jquery      更新时间:2023-09-26

我有一些ajax onclick的东西,更新这一行当值从菜单中选择:

<li id="li_273" data-pricefield="special" data-pricevalue="0" >

目的是获取该值(data- pricvalue),然后将其乘以从另一个输入框输入的金额。下面是我的函数来实现这一点:

$('#main_body').delegate('#element_240','keyup', function(e){
var temp = $(this).attr("id").split('_');
var element_id = temp[1];
var price = $('#li_273').data("pricevalue"); 
var ordered = $(this).val();
var price_value = price * ordered;
price_value = parseFloat(price_value);
if(isNaN(price_value)){
    price_value = 0;
}
$("#li_273").data("pricevalue",price_value);
calculate_total_payment();  

});

除了我得到以下错误:未捕获的类型错误:不能调用null的方法'data'

似乎我试图从getElementById中获取价格值是不正确的。有什么建议吗?

UPDATE:以上代码是根据您的建议编辑的,感谢所有人。

这部分错误:

var price = document.getElementById('#li_273').data("pricevalue").val();
相反,你应该在这里使用jQuery:
var price = $('#li_273').data("pricevalue"); 

顺便说一句,你不应该使用.val(),因为.data()已经返回一个字符串。.val()仅用于<input><select>等输入元素

同样,剩下的代码应该像这样:

var price_value = parseFloat(price);
if(isNaN(price_value)){
    price_value = 0;
}

getElementById不返回一个jQuery对象,它只是返回一个普通的DOM对象。

你可以将任何DOM对象包装在jQuery调用中以获得它作为jQuery对象:

 $(document.getElementById("li_273")).data("pricevalue").val();

或者干脆使用jQuery

 $("#li_273").data("pricevalue").val()

你的调用应该是document.getElementById('li_273'),这是一个正常的方法,不需要像jQuery那样的哈希。

EDIT正如@kennypu指出的那样,你然后在非jQuery对象上使用jQuery。@Craig有最好的解决方案。

document.getElementById('#li_273').data("pricevalue").val();应该是jQuery('#li_273').data("pricevalue").val();

变量price_value也不存在,我想你指的是price

,

$('#main_body').delegate('#element_240','keyup mouseout change', function(e){
    var temp = $(this).attr("id").split('_');
    var element_id = temp[1];
    var price = $('#li_273').data("pricevalue").val();
    var ordered = $(this).val();
    var price_value = parseFloat(price);
    if(isNaN(price_value)){
        price_value = 0;
    }
    $("#li_273").data("pricevalue",price_value);
    calculate_total_payment();          
}); 

document.getElementById('#li_273')是问题所在。该方法无法识别散列。如果您想使用该方法获取元素ID,请尝试document.getElementById('li_273'),它将起作用。

既然你正在使用jQuery,为什么你要使用文档。getElementById而不是$(...) ?应该是:

$('#li_273').data("pricevalue")

还要注意,data()方法只定义在jQuery对象上,而不是DOM元素上。并且您不需要在它之后调用val()—这是用于获取表单元素的值。

你的getElementById是错误的javascript你不需要#,如果你使用jQuery这样做(我也删除了。val(),因为它不需要):

$('#main_body').delegate('#element_240','keyup mouseout change', function(e){
    var temp = $(this).attr("id").split('_');
    var element_id = temp[1];
    var price = $('#li_273').data("pricevalue");
    var ordered = $(this).val();
    price_value = parseFloat(price_value);
    if(isNaN(price_value)){
        price_value = 0;
    }
    $("#li_273").data("pricevalue",price_value);
    calculate_total_payment();          
});