2013-01-05 94 views
1

jquery函數的點擊事件在a標籤之前不起作用,但它在a標籤之後正常工作。另外,如果我使用document.ready那麼它的工作原理。我想知道爲什麼它不在a標籤之前工作。頁面上沒有加載函數

<head> 
    <script type="text/javascript"> 
     function jchand(){ 
      $('a').click(function(){ 
       alert('a') 
      }) 
     } 
     jchand(); 
    </script> 
</head> 
<body> 
    <a href="#" >click me</a> 
</body> 

回答

3

當您嘗試綁定.click,在頁面尚未完成加載元素不存在。

另一件事如果我使用文檔。就緒則工作

嗯,這正是$(document).ready

$(document).ready(function() 
{ 
    $('a').click(function() 
    { 
     alert('a'); 
    }); 
}); 

或者,你可以使用.on()

$(document).on('click', 'a', function() 
{ 
    alert('a'); 
}); 

而不是綁定到整個文檔,因此將適用於將來添加的任何元素。

0

因爲腳本在DOM中加載之前正在調用。此時,它看不到任何'a'元素來附加點擊元素。儘管函數聲明是可以的,但它必須在'a'之後調用。

document.ready函數在加載頁面的所有元素後調用腳本,因此它被觸發。

2

$('a')尋找<a>元素,但DOM沒有準備好。使用$(document).ready()創建被觸發時,DOM其實是準備好一個回調函數:

$(document).ready(function() { 
    $('a').click(function(){ 
     alert('a'); 
    }) 
}) 
0

你的腳本執行前的DOM已準備就緒。如果你調用($(document).ready(function())$(function()))文件準備的功能它會像這樣:

<head> 
<script type="text/javascript"> 
    function jchand(){ 
     $('a').click(function(){ 
      alert('a') 
     }) 
    } 

    $(function() { 
     jchand(); 
    }) 
</script> 
</head> 
<body> 
<a href="#" >click me</a> 
</body> 
1

最可能的問題是jchand()在<a>元素存在之前執行。試試這個:

<script type="text/javascript"> 
$(function(){ 
$('a').click(function(){ 
alert('a') 
}) 
}); 
</script>