2012-06-27 83 views
4

我有一個簡單的SO。爲什麼我無法將點擊事件直接附加到錨ID?我應該指出我也在使用JQuery Mobile。將JQuery單擊事件添加到錨點Id

  <div id="foobarNavbar" data-role="navbar" style="display:none;"> 
       <ul> 
        <li><a id="foo" href="#foo" data-icon="plus">New Event</a></li> 
        <li><a id="bar" href="#bar" data-icon="grid">Events</a></li> 
       </ul> 
      </div><!-- /foobarNavbar--> 

我試圖附加一個click事件給foo。這是行不通的:

 $('#foo').bind('click', function(e) 
     { 
      e.preventDefault(); 
      console.log("You clicked foo! good work"); 
     }); 

這是行不通的,但給我的foo和酒吧的點擊事件。是不是可以綁定到一個錨點ID還是我做一個菜鳥錯誤?

 $('#foobarNavbar ul li a').bind('click', function(e) 
     { 
      e.preventDefault(); 
      console.log("You clicked foo! good work"); 
      console.log(e); 
     }); 
+1

第一個[應該可以正常工作](http://jsfiddle.net/J7GAA/)。執行代碼時DOM是否準備就緒? –

+1

http://jsfiddle.net/cwyRb/第一個確實有效。 – Pointy

+0

這是JQuery Mobile。文檔準備就緒後,頁面沒有加載到dom中 – JonWells

回答

1

重要提示:使用的$(document).bind( 'pageinit'),而不是$(文件)。就緒()

您在jQuery中學到的第一件事就是調用 $(document).ready()函數中的代碼,以便在加載DOM時立即執行所有操作。但是,在jQuery Mobile中,Ajax用於在導航時將每個頁面的 內容加載到DOM中,DOM準備好的 處理程序僅對第一頁執行。要在加載和創建新頁面時執行代碼,可以綁定到pageinit事件。 此事件在本頁底部詳細解釋。

我試圖綁定使用文檔準備,而不是pageinit。第一個功能

$('#foo').bind('click', function(e) 
     { 
      e.preventDefault(); 
      console.log("You clicked foo! good work"); 
     }); 

在移動到'pageinit'事件時工作正常。然而,我仍不確定爲什麼第二個代碼示例能夠工作,但不是第一個。

2

換行代碼的文件ready中,如果你沒有任何其他腳本錯誤,你有jQuery的加載它應該工作。

$(function(){ 
    $('#foo').click(function(e) 
    { 
     e.preventDefault(); 
     console.log("You clicked foo! good work"); 
    }); 
}); 
+0

我同意這是一個正確的事情,但如果OP中的第二個例子工作,那肯定是他已經在使用「ready」處理程序或其他東西以確保DOM已準備就緒。 – Pointy

+1

由於jQuery 1.7,你應該使用'.on(event,handler)'而不是綁定 – Chris

+0

@Pointy;我同意。我想其他一些腳本錯誤可能是。或者另一種可能性是他在1 mnt後點擊第二個例子(DOM應該已經加載了)然後快點擊第一個例子! – Shyju

1

這樣說,這將工作我猜...

$('#foobarNavbar').on('click','#foo', function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    console.log("You clicked foo! good work"); 
    console.log(e); 
});