我的rails应用程序发生了一些非常奇怪的事情。
由于一些奇怪的原因,jQuery无法识别我在DOM中的id。 我举个例子。
我有一个javascript函数,如下所示:
function myFunction(){
$('#hello').toggle();
}
很简单,它应该用id =“hello”来切换元素。 但它给了我一个$(“#hello”)是null错误。 (即使视图文件中有一个)
但如果我使用$('hello')。toggle()而不是$('#hello')。toggle(),则会观察到预期的行为。
有人可以告诉我发生了什么吗?
谢谢,
PUNIT
答案 0 :(得分:3)
您(或某些组件)是否正在将Prototype库添加到您的页面?在Prototype中,您使用$('id')而不是$('#id')按ID进行选择。另外,如果没有找到匹配项,Prototype的$()函数将返回null,而jQuery的$()函数将永远不会返回null。
如果在jQuery之后加载了Prototype(或带有$()函数的另一个库),它会踩到jQuery版本的$()函数。
如果结果是这种情况,并且您无法避免同时使用jQuery和其他库,那么您可能希望利用jQuery.noConflict。
答案 1 :(得分:2)
我只是有同样的经历而且正在失去理智!但我意识到我复制了以前的HTML页面以保持相同的格式,但它将ID复制到新页面,因此jQuery对它是哪个ID感到困惑。
请务必在整个网站中使您的ID唯一。
迟了六年,但我希望这篇文章将来会帮助其他人。
答案 2 :(得分:1)
html加载后你有那个脚本吗?
如果没有,请将其放在此标记
中$(document).ready(function() {
// put all your jQuery goodness in here.
});
脚本可能在HTML加载之前执行,因此错误。
答案 3 :(得分:1)
$('hello')
选择器匹配名为hello的元素,$('#hello')
将匹配id为hello的元素。你有没有错误地命名元素而不是应用id?
答案 4 :(得分:0)
在我很奇怪的情况下,即使在您尝试访问正确的ID jQuery(“#id1”)的情况下,我在一个元素的一个ID字段中也有两个ID:p id =“ id1 id2”...。 。出现此错误,即对象未定义。欢呼!