2016-05-15 78 views
0

我有問題,第一個文本框的作品自動完成,但不能用於其他通過按鈕添加的作品。這裏是我的代碼:jQuery自動完成不適用於多個文本輸入

HTML:

<input class="button" type="button" value="+" onclick="addRow('positionen')" /> 
<input class="button" type="button" value="-" onclick="deleteRow('positionen')" /> 
<table id="positionen"> 
    <tr> 
     <td><input type="checkbox" name="chk[]" /></td> 
     <td><input class="ui-widget" type="text" name="text[]" placeholder = "Text" /></td> 
     <td><input type="text" name = "val[]" placeholder = "Val" /></td> 
    </tr> 
</table> 

功能addRow:

function addRow(tableID) { 
    var table = document.getElementById(tableID); 
    var rowCount = table.rows.length; 
    var row = table.insertRow(rowCount); 
    var colCount = table.rows[0].cells.length; 
    for(var i=0; i<colCount; i++) { 
     var newcell = row.insertCell(i); 
     newcell.innerHTML = table.rows[0].cells[i].innerHTML; 
     switch(newcell.childNodes[0].type) { 
      case "text": 
        newcell.childNodes[0].value = ""; 
        break; 
      case "checkbox": 
        newcell.childNodes[0].checked = false; 
        break; 
     } 
    } 
} 

功能deleteRow:

function deleteRow(tableID) { 
    try { 
     var table = document.getElementById(tableID); 
     var rowCount = table.rows.length; 
     for(var i=0; i<rowCount; i++) { 
      var row = table.rows[i]; 
      var chkbox = row.cells[0].childNodes[0]; 
      if(null != chkbox && true == chkbox.checked) { 
       if(rowCount <= 1) { 
        alert("Can't delete all rows"); 
        break; 
       } 
       table.deleteRow(i); 
       rowCount--; 
       i--; 
      } 
     } 
    } catch(e) { 
     alert(e); 
    } 
} 

自動完成代碼:

$(function() { 
    $(".ui-widget").focusin(function(){ 
     $(this).autocomplete({ 
      source: 'search.php' 
     }); 
    }); 
}); 

默認情況下頁面上的第一個文本框與自動完成工作正常。但是,當我使用按鈕添加文本框時,自動完成功能不適用於此文本框。加載頁面時

回答

0

事件是綁定到HTML,新行不存在,你只需要通過簡單地增加給你的addRow功能

function addRow(tableID) { 
    var table = document.getElementById(tableID); 
    var rowCount = table.rows.length; 
    var row = table.insertRow(rowCount); 
    var colCount = table.rows[0].cells.length; 
    for(var i=0; i<colCount; i++) { 
     var newcell = row.insertCell(i); 
     newcell.innerHTML = table.rows[0].cells[i].innerHTML; 
     switch(newcell.childNodes[0].type) { 
      case "text": 
        if (newcell.childNodes[0].className === 'ui-widget ui-autocomplete-input') { 
         $(newcell.childNodes).autocomplete({ 
          source: 'search.php' 
         }); 
        } 
        newcell.childNodes[0].value = ""; 
        break; 
      case "checkbox": 
        newcell.childNodes[0].checked = false; 
        break; 
     } 
    } 
} 
+0

「row.autocomplete」將其綁定到創建的行不適合我。然而,當我做「$(」。ui-widget「)。自動完成({0128}它工作正常! – thotho

+0

我的錯誤:),我忘了把行放在$()中。如果你「$(」。ui-widget「)。autocomplete({source:'search.php'});」你正在綁定事件到現有的行 - 你自動完成事件將被稱爲幾次這是錯誤的 - 編輯答案 – homer

+0

可悲的是,這是行不通的... – thotho