2016-01-28 40 views
0

我正在使用以下代碼來創建自動完成文本框。 jQuery如下。製作委託jQuery自動完成

$(function() { 
    $("#items .slno").autocomplete({ 
     source: 'search.php' 
    }); 
}); 

HTML如下。

<table id="items"> 
    <tr class="item-row"> 
      <td class="item-name"><div class="delete-wpr"><a class="delete" href="javascript:;" title="Remove row">-</a></div></td> 
      <td><input type="text" id="slslno" class="slno"/></td> 
      <td><input type="text" class="cost"/></td> 
      <td><input type="text" class="qty"/></td> 
      <!-- <td><span class="price"></span></td>--> 
      <td class="price"></td> 
      <a class="add" id="addrow" href="javascript:;" title="Add a row">+</a> </tr> 

</table> 

自動完成適用於第一行。但是,當通過單擊上面代碼中的「添加行」按鈕(其所有工作正常)創建第二行時,Auto_complete只是不適用於後續行。我認爲我需要一個委託處理程序。那麼我該如何將當前的jQuery選擇器轉換爲委託的呢?

我有點基於答案寫下如下,但它仍然不起作用。

$('#items').delegate('#items .slno','keyup', function() { 

    $(this).autocomplete({ 
     source: 'search.php' 
    }); 

    }); 

然後我繼續使用以下內容。

$(function(){ 
    $('#items').on('.slno','keyup.autocomplete', function(){ 
    $(this).autocomplete({ 
     source : 'search.php' 
    }); 
    }); 
}); 

它也失敗了。我如何實現這一目標?

UPDATE

在上面的例子中,事件的順序被搞亂了。只需要使用正確的語法

$(selector).on(event,childSelector,data,function,map) 

這使得我的代碼如下所示。

$(function(){ 
    $('#items').on('keyup.autocomplete','.slno', function(){ 
    $(this).autocomplete({ 
     source : 'search.php' 
    }); 
    }); 
}); 

它做了任務!

+0

類=「slno」未在其他列 – abhi

+1

實現我不明白你想什麼說 –

+0

類,如果OP被克隆行,被添加到該行@abhi –

回答

0

下面的代碼對我來說就像一個魅力。

$(function(){ 
     $('#items').on('keyup.autocomplete','.slno', function(){ 
     $(this).autocomplete({ 
      source : 'search.php' 
     }); 
     }); 
    });