2012-07-30 99 views
1

這是我的jquery:jquery on()不能使用點擊事件?

$(document).ready(function(){ 
    $("div#overlay div#getFBid div#overlayClose").on("click", function(){ 
     console.log("test") 
    }); 
}); 

,這是我的HTML,這就是所謂使用Ajax:

<div id="overlay"> 
    <div id="getFBid"> 
     <div id="overlayClose">&nbsp;</div> 
     <h1>Wat is mijn Facebook page ID?</h1> 
     <div id="fbPageURLholder"> 
      <input type="text" id="fbPageURL"> 
     </div> 
    </div> 
</div> 

我想不出什麼我做錯了,我顯然錯過了我認爲應該很簡單的事情。 有什麼想法?

PS。我應該補充說,我在jquery.com上看到,live函數已被棄用,我應該使用delegate或on。

+0

ajax在哪裏發生? – 2012-07-30 09:53:24

+0

在這裏工作很好http://jsfiddle.net/CG8up/ – Esailija 2012-07-30 09:53:49

+0

Works here:http://jsfiddle.net/faceleg/bghdS/ HTML不在iFrame中嗎? – 2012-07-30 09:53:50

回答

8

此:

$("div#overlay div#getFBid div#overlayClose") 

可以降低到

$('#overlayClose') 

因爲你永遠只能有一個ID的一個元素在文檔中。

至於問題;如果您使用AJAX加載內容,那麼當您綁定偵聽器時,DOMReady中將無法使用它。

綁定到尚未添加的元素,你需要使用一個現場代表:

$(document).on('click', '#overlayClose', function() { 
    console.log('test'); 
}); 

$(document)應儘量靠近元素儘可能的東西,這可在domready中,而且沒有被破壞。

+0

謝謝!我不知道,謝謝你這麼快解決我的問題。 – SheperdOfFire 2012-07-30 09:56:18

+0

http://api.jquery.com/on/#direct-and-delegated-events – billyonecan 2012-07-30 09:57:05

0

您是否導入了jQuery?

這對我的作品,點擊關閉將在控制檯登錄測試消息:

<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"  type="text/javascript"></script> 
</head> 
<body> 
    <div id="overlay"> 
     <div id="getFBid"> 
      <div id="overlayClose">Close</div> 
       <h1>Wat is mijn Facebook page ID?</h1> 
       <div id="fbPageURLholder"> 
        <input type="text" id="fbPageURL"> 
       </div> 
      </div> 
    </div> 
</body> 
</html> 

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $("#overlayClose").on("click", function(){ 
      console.log("test") 
     }); 
    }); 
</script> 

希望有所幫助。