繁体   English   中英

jQuery,Ajax,JavaScript-通过ID获取元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM