2012-03-22 39 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

相關問題