2012-03-22 38 views
0

超级奇怪的问题在这里。我无法让jQuery在.js文件内绑定除文档之外的任何选择器。无法将jQuery选择器绑定到任何文档 - Rails 3.2

示例代码:

$(document).click(function() { 
$("#nav_primary").empty(); 
}); 

当我点击任何地方,在nav_primary DIV清空,符合市场预期,但是,当我使用此代码:

$("div").click(function() { 
$("#nav_primary").empty(); 
}); 

什么,当我点击情况。除非我将它输入到控制台中。当我将上面的代码粘贴到我的Firebug控制台中时,它会按预期加载,并在任何地方点击按预期清空div。

我了解JavaScript和jQuery都在运行,因为我有这个在我的JS和它记录预期:

console.log("js is running"); 
if (jQuery) {console.log('jQuery is loaded!');} 

我听说有与原型冲突,但我不认为我正在运行它。这里是我的头:

<head> 
    <link href="/assets/application.css?body=1" media="all" rel="stylesheet" type="text/css" /> 
    <script src="/assets/jquery.js?body=1" type="text/javascript"></script> 
    <script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script> 
    <script src="/assets/portfolio.js?body=1" type="text/javascript"></script> 
    <script src="/assets/application.js?body=1" type="text/javascript"></script> 
    <link href="/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" /> 
    <meta content="authenticity_token" name="csrf-param" /> 
    <meta content="(token here)" name="csrf-token" /> 
    <!--[if !IE 7]> 
    <style type="text/css"> #main {display:table;height:100%} </style> 
    <![endif]--> 
    <!--[if lt IE 9]> 
    <script src='//html5shiv.googlecode.com/svn/trunk/html5.js'></script> 
    <![endif]--> 
</head> 

回答

2

愚蠢的答案。但是你把你的代码放在ready函数中

例如,

$(function() { 

    $("div").click(function() { 
     $("#nav_primary").empty(); 
    }); 
}); 
+0

就是这样。 18个月的jQuery工作,我所做的一切都是修改和维护其他人的功能;我从来没有用这个框架开始自己的环境。 (此外,docs.jquery.com目前处于脱机状态) – user1279629 2012-03-22 04:28:18

+0

很高兴这是我的回答对您有帮助。之所以不起作用是因为你在头部定义了你的函数,但是当jquery试图找到'div'元素时,它找不到任何东西,因为浏览器的解析器仍然在头部中,它必须解析到'body'或'html'标签的第一个末尾 – Rezigned 2012-03-22 04:35:07

0
$("div").click(function() { 
$("#nav_primary").empty(); 
}); 

最有可能的,你想上附着的div尚未在DOM中,当你运行你的代码(和$("div")只是一个空列表)。

试试这个:

$(document).on("click", "div", function() { 
$("#nav_primary").empty(); 
}); 
+0

这是有道理的,你的解决方案的工作,但另一种解决方案有我正在找的答案。谢谢! – user1279629 2012-03-22 04:23:49

0

没有看到你的DOM,并假设你把这些事件里面$(function() { }); ...

尝试:

$(document).on('click', 'div', function() { 
    $("#nav_primary").empty(); 
}); 
+0

,而这个工作,另一个答案有我正在寻找的解决方案。 (和不,我没有把它放在$(function(){})中;但是这个页面也没有http://api.jquery.com/empty/我猜这是因为我的函数是在头,这个例子是在body中定义的。 – user1279629 2012-03-22 04:26:47

+0

Ya,'$ .empty()'是来自jQuery ** 1.0 **,所以我猜这个操作的顺序并不是当时的文档优先级(意思是'$(document).ready()'不是主流) – Terry 2012-03-22 04:39:57

+0

好吧,很多函数都没有绑定;我无法获得任何工作,这是因为在创建处理程序时没有构建dom 。 – user1279629 2012-03-22 04:49:33

相关问题