2011-03-28 76 views
0
 <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>test</title> 
    <script type="text/javascript" src="js/jquery.js"></script> 
    <script type="text/javascript"> 
    $('#target').blur(function() { 
alert('welcome,boy.'); 
    }) 
</script> 
    </head> 

<body> 
    <form> 
<input id="target" type="text" value="Field 1" /> 
<input type="text" value="Field 2" /> 
    </form> 
<div id="other"> 
    Trigger the handler 
</div> 

</body> 
</html> 

jquery.js在我的js文件中,我把上面的代碼放在一個名爲test.html的文件中。當我點擊第一個輸入文本框然後點擊其他地方。沒有彈出警告框?爲什麼blur()不能工作?

回答

3

當瀏覽器在HTML中讀取該腳本時,該腳本甚至在它看到主體之前立即運行。腳本運行時,#target元素尚不存在。

一個解決方案是將腳本移動到<body>的底部。另一個辦法是使用jQuery的DOM功能齊全:

$(function() { 
    $('#target').blur(function() { 
     alert('welcome,boy.'); 
    }); 
}); 

在這種情況下,你仍然可以把腳本的頭部和腳本本身將運行。但是,它會延遲運行$(function() { /* code here */ })包裝內的部分,直到瀏覽器讀取完所有的HTML並構建了其良好的DOM元素樹。

+0

哈,打我33秒 – mnelson 2011-03-28 02:46:26

+0

@mikeonrails:+1,無論如何。一個好的答案是一個很好的答案:) – Matchu 2011-03-28 02:46:57

+0

類似的答案@mikeonrails,但你的解釋更多。 – jessegavin 2011-03-28 03:01:02

3

這是因爲執行代碼時#target不存在。試試這個:

<script type="text/javascript"> 
    $(function(){ 
    $('#target').blur(function() { 
     alert('welcome,boy.'); 
    }); 
    }); 
</script>