[英]Jquery, ajax, javascript - getting an element by id
我有一些ajax onclick东西,当从菜单中选择该值时会更新此行:
<li id="li_273" data-pricefield="special" data-pricevalue="0" >
目的是获取该值(数据价格值),然后乘以从另一个输入框输入的数量。 这是我要实现这一目标的功能:
$('#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();
});
除了我收到以下错误:未捕获的TypeError:无法调用null的方法“数据”
似乎是我尝试从getElementById中获取价格值的尝试不正确。 有什么建议么?
更新:以上代码已根据您的建议进行了编辑,并感谢所有人。 现在看来一切正常。
这部分是错误的:
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那样需要哈希。
编辑正如@kennypu指出的那样,您然后在非jQuery对象上使用jQuery。 @Craig拥有最佳解决方案。
您的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();
});
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。
由于您使用的是jQuery,为什么要使用document.getElementById而不是$(...)
呢? 它应该是:
$('#li_273').data("pricevalue")
还要注意, data()
方法仅在jQuery对象上定义,而不在DOM元素上定义。 而且您不需要在其后调用val()
-这是为了获取表单元素的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.