3

当从菜单中选择值时,我有一些 ajax onclick 内容会更新此行:

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

目的是获取该值 (data-pricevalue),然后将其乘以从另一个输入框中输入的金额。这是我试图实现这一目标的功能:

$('#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 的方法“数据”

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

更新:上面的代码已根据您的建议进行了编辑,感谢大家。它现在似乎工作得很好。

4

7 回答 7

6

这部分是错误的:

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;
}
于 2012-12-22T02:26:51.193 回答
3

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

您可以将任何 DOM 对象包装在 jQuery 调用中以将其作为 jQuery 对象获取:

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

或者更好的是只使用 jQuery

 $("#li_273").data("pricevalue").val()
于 2012-12-22T02:24:02.423 回答
2

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

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

于 2012-12-22T02:21:59.253 回答
1

您的 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();          
}); 
于 2012-12-22T02:21:28.050 回答
1

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();          
}); 
于 2012-12-22T02:23:09.430 回答
1

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

否则使用所有 jQuery。

于 2012-12-22T02:23:15.273 回答
1

既然您使用的是 jQuery,为什么要使用 document.getElementById 而不是$(...)?它应该是:

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

另请注意,该data()方法仅定义在 jQuery 对象上,而不是 DOM 元素上。而且你不需要val()在它之后调用——这是为了获取表单元素的值。

于 2012-12-22T02:25:39.123 回答