Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery、ajax、javascript—通过id获取元素_Javascript_Jquery - Fatal编程技术网

Jquery、ajax、javascript—通过id获取元素

Jquery、ajax、javascript—通过id获取元素,javascript,jquery,Javascript,Jquery,我有一些ajax onclick的东西,当从菜单中选择值时,它会更新此行: <li id="li_273" data-pricefield="special" data-pricevalue="0" > })) 但我得到以下错误: 未捕获的TypeError:无法调用null的方法“data” 似乎我试图从getElementById中获取价格值的尝试不正确。有什么建议吗 更新:以上代码已根据您的建议进行编辑,谢谢大家。它现在似乎工作得很好。您的getElementById与jav

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

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

但我得到以下错误: 未捕获的TypeError:无法调用null的方法“data”

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


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

您的getElementById与javascript错误您不需要
#
,如果您使用jQuery,请这样做(我还删除了.val(),因为它不需要):


您的调用应该是
document.getElementById('li_273')
这是一个普通方法,不需要像jQuery那样使用散列


EDIT正如@kennypu指出的那样,您正在对非jQuery对象使用jQuery@克雷格有最好的解决办法

document.getElementById('li#u 273').data(“pricevalue”).val()
应该是
jQuery('#li_273').data(“pricevalue”).val()

同样,变量
price\u value
不存在,我认为您的意思是
price

例:


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


否则使用所有jQuery。

getElementById不会返回jQuery对象,它只返回普通DOM对象

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

 $(document.getElementById("li_273")).data("pricevalue").val();
或者最好使用jQuery

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

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

$('#li_273').data("pricevalue")
还要注意,
data()
方法只在jQuery对象上定义,而不是在DOM元素上定义。您不需要在它之后调用
val()
,这是为了获取表单元素的值。

这部分是错误的:

var price = document.getElementById('#li_273').data("pricevalue").val();
相反,您应该一直使用jQuery:

var price = $('#li_273').data("pricevalue"); 
顺便说一句,你不应该使用
.val()
,因为
.data()
已经返回了一个字符串
.val()
专门用于输入元素,例如

更新

另外,代码的其余部分应该是这样的:

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

请注意,委托()已弃用,请在()上使用instead@Christophe根据OP使用的版本而定。@Christophe:
从jQuery 1.7开始,.delegate()已被.on()方法取代
delegate()
尚未标记为已弃用。请参阅标记为已弃用的功能:。已取代和弃用之间存在差异。标记为已弃用的功能可能会在任何新版本中被删除,而被取代的功能则不会被删除。当我尝试使用.on方法时,我发现了错误,但委托仍然有效。@Christophe:另外,作为一个有趣的补充说明。在jQuery的更高版本中,如果您使用的是
委托
实时
(已弃用)、
绑定
,等等,实际上根本不重要。。因为这些方法已经被重新编写为在()上使用。1.7.1源代码示例:
delegate:function(selector,types,data,fn){返回这个。在(types,selector,data,fn);},
bind:function(types,data,fn){返回这个。在(types,null,data,fn);},
但是,人们应该始终遵循文档中给出的建议,以防止出现任何意外问题。此外,他还将本机javascript与jQuery混合使用。该行应为$('liu 273').data('pricevalue').val();当我尝试它时,我得到:uncaughtreferenceerror:price\u value不是defined@MrTechie嗯,那是因为我没有发现你代码中的另一个错误:)更新了我的答案。@Jack,我也看到了-price\u val不是price\u value。但如果每件商品的价格是2.38美元,那么它的总价值是238.00美元,而不是23.80美元。想法?@techie先生谁知道?这种逻辑肯定不是你发布的代码的一部分,你的代码有
price\u value=parseFloat(price\u value)但从不设置
价格值
。应该是
parseFloat(price)
?是否应该有代码乘以订购的
price*
得到总数?您发布的代码中缺少各种内容。谢谢您的解释。jQuery对我来说还是个新手,我正在尝试。您的解决方案有效-但是,如果项目是2.38美元,我输入10-它给我238.00美元,而不是23.80美元。想法?正确-疲惫的眼睛说价格和价值不一样。这是可行的,但总价格是错误的。它给了我238.00美元,而不是23.80美元,价值10。思想?
var price = document.getElementById('#li_273').data("pricevalue").val();
var price = $('#li_273').data("pricevalue"); 
var price_value = parseFloat(price);
if(isNaN(price_value)){
    price_value = 0;
}