2010-02-16 96 views
0

我有下面的代碼,我想要做的是建立一個自動完成輸入框,當它被填寫時,在它下面創建另一個自動完成輸入框。jquery自動完成輸入數組

  • 我的代碼的問題是, 因爲我使用的模糊,將我點擊過的 第一個每次創建 新的輸入。

  • 第二個問題是 ,我需要設置自動完成 在新創建的輸入框,但 如果我去做了遞歸那麼它將 崩潰。

代碼:

function setupAutoComplete() 
{ 
var autoCompleteData = $("#listContacts").html().split("<br>"); 
//autoCompleteData = replaceAll(autoCompleteData, "&lt;", "<"); 
//autoCompleteData = replaceAll(autoCompleteData, "&gt;", ">"); 
$("[name|=toemail[]]").autocomplete(autoCompleteData); 
$("[name|=toemail[]]").result(function(event, item) { 
    $("[name|=toemail[]]").blur(); 
}); 
$("[name|=toemail[]]").blur(function(){ 
    var newString = $(this).val(); 
    newString = replaceAll(newString, "&lt;", "<"); 
    newString = replaceAll(newString, "&gt;", ">"); 
    $(this).val(newString); 
    var newfield = '<p><label class="" disabled="true"><select name="toSelect[]"><option>To: </option><option>CC: </option><option>BCC: </option></select></label><input type="text" value="" name="toemail[]" /></p>'; 
    $("#composeTo").append(newfield); 
}); 
} 

回答

0

發佈我自己的解決方案。

function setupAutoComplete() 
{ 
    var autoCompleteData = $("#listContacts").html().split("<br>"); 


$("[name|=toemail[]]").each(function(key, value) { 
    if (!($(this).hasClass("blurred"))) 
    { 
    $(this).autocomplete(autoCompleteData); 
    $(this).result(function(event, item) { 
     var newString = $(this).val(); 
     newString = replaceAll(newString, "&lt;", "<"); 
     newString = replaceAll(newString, "&gt;", ">"); 
     $(this).val(newString); 
     $(this).blur(); 
    }); 
    $(this).blur(function(){ 
     if (!($(this).hasClass("blurred"))) 
     { 
     var newfield = '<p><label class="" disabled="true"><select name="toSelect[]"><option>To: </option><option>CC: </option><option>BCC: </option></select></label><input type="text" value="" name="toemail[]" /></p>'; 
     $("#composeTo").append(newfield); 
     setupAutoComplete(); 
     $(this).addClass("blurred"); 
     } 
    }); 
    } 
}); 
1

,而不是設置了自動完成的元素爲一組,你應該單獨做它作爲創建的每個之一。這將停止遞歸。

其次爲了避免onblur事件觸發,當你點擊屏幕上的其他位置時,你應該捕捉按鍵上的tab鍵。