2011-06-23 72 views
0

如果我刪除第一行(alert()),下面的代碼將不起作用,並且很明顯我不需要它。我綁定事件的表單是用jquery隨時生成的。請問可能是什麼問題?謝謝。我不明白這個JavaScript/jQuery代碼如何執行

alert(""); 
$("#search").autocomplete('func.php'); 
$("#c_name").autocomplete('func.php'); 

$("#search").keypress(function(event) { 
    if (event.which === 13) { 
     findItem('search'); 
     return false; 
    } 
}); 
+1

什麼不正確?你會得到什麼錯誤? –

回答

2

警報正在給表單加載所需的延遲,之後將事件綁定到元素是有意義的。如果沒有alert語句,代碼將在表單元素實際加載之前執行。嘗試使用jquery的live()函數將事件綁定到正在動態加載的元素。以下是如何使用它:http://api.jquery.com/live/

5

可能是警報提供了jQuery識別所需元素所需的延遲。

刪除警報()和周圍添加以下代碼:

$(document).ready(function(){ ... your code here ... }) 
+0

這確保代碼不會在頁面完成加載之前得到執行,並且所有必需的元素都存在於DOM中。你也可以使用較短的'$(function(){... execute stuff)};' –

0

您需要的$(document)。就緒一拉來包裝這個在:

$(document).ready(function(){ 
    $("#search").autocomplete('func.php'); 
    $("#c_name").autocomplete('func.php'); 

    $("#search").keypress(function(event) { 
     if (event.which === 13) { 
      findItem('search'); 
      return false; 
     } 
    }); 
}); 
1

如果$("#search")被稱爲在動態創建搜索表單之前,jQuery查詢將返回0個對象,並且不能將事件綁定到任何事物。

alert()的調用創建了一個暫停,允許在進行$("#search")查詢之前創建表單。您可以通過alert確認此項,$("#search")的結果有無首個alert()

在嘗試將任何事件綁定到它之前,您必須確保已創建搜索表單。如果這不是微不足道的事,你可以考慮使用jQuery 1.5+ deferred objects。可以使用延遲對象來確保在綁定事件之前創建搜索表單。

相關問題