2011-06-12 57 views
1

我看到當我把就緒事件功能的作品,但隨着我刪除它不..爲什麼這個jquery函數不顯示給我一個警告框?

作品。

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('.clicky').click(function() { 
      alert("TEst10"); 
      $(this).addClass('clicked'); 
      alert("TEst10"); 
      setTimeout(function() { 
       $(this).removeClass('clicked'); 
      }, 1000); 
     }); 
    }); 
</script> 

不起作用

<script type="text/javascript"> 
    $('.clicky').click(function() { 
     alert("TEst10"); 
     $(this).addClass('clicked'); 
     alert("TEst10"); 
     setTimeout(function() { 
      $(this).removeClass('clicked'); 
     }, 1000); 
    }); 
</script> 

爲什麼第二個不工作?

+0

。就緒()不會,如果你把你的腳本'.clicky'元素之後,或者在頁面結束它的工作? – Sparkup 2011-06-12 07:55:31

+0

因爲它不在'document.ready'裏(很明顯):http://api.jquery.com/ready/ – 2011-06-12 07:56:15

+0

適合我,雖然你爲什麼要避免不使用$(document).ready? – ngen 2011-06-12 07:59:44

回答

3

因爲當第二個代碼被調用時,具有類clicky的元素不在DOM結構中。

第一個工作原理是因爲您將代碼包裝在document.ready函數中,該函數在DOM準備就緒後會被調用。

如果您想讓第二個代碼工作,只需將代碼放入元素定義爲clicky的元素後面,那麼最好將腳本放在body標記的末尾。

但爲什麼不只是使用document.ready

1

第二個代碼可能在瀏覽器完成加載頁面之前運行,並且clicky元素尚不存在。常見解決方法:從文檔完成加載時調用的事件處理程序運行代碼(就像您的第一個示例那樣),將腳本標記放置在其引用的HTML標記之後,或使用live來綁定點擊處理程序。

1

如果腳本標記放置在Target元素之前,則需要使用doc準備好。這是因爲在將事件附加到它之前,該元素必須存在。

爲什麼你不想使用doc準備好?您可以將腳本標記向下移動頁面使用.live綁定點擊

HTH!

1

ready()函數是一個處理函數。 DOM準備就緒後執行的函數。

雖然JavaScript在呈現頁面時提供用於執行代碼的加載事件,但直到所有資產(如圖像)都已完全接收後纔會觸發此事件。在大多數情況下,腳本可以在DOM層次結構完全構建後立即運行。傳遞給.ready()的處理程序保證在DOM準備就緒後執行,因此這通常是附加所有其他事件處理程序並運行其他jQuery代碼的最佳位置。在使用依賴CSS樣式屬性值的腳本時,在引用腳本之前引用外部樣式表或嵌入樣式元素很重要。

更多關於jquery site

相關問題