您遇到的問題是,你的語法適用在你選擇一個插件實例到所有項目。
$('.inp_txt').quicksearch(...)
就像是打電話('.inp_txt').click(...)
- 你會得到一個處理程序,用於匹配每個元素。
要解決這個問題,你需要做的是這樣的:通過每個.inp_txt
項目
$('.inp_txt').each(function (index, value) {
var $input = $(value);
// Get a reference to the list you want for this input...
var $quickSearch = $('ul.myList li');
$input.quicksearch($quicksearch);
});
這段代碼迴路,並應用了獨特的處理程序爲每一個。
在您的場景中,聽起來您只有一個ul.myList
- 這可能是您總是看到相同列表的另一個原因。如果是這樣的話,你可能會考慮像...
<div>
<input type="text" class="inp_txt" />
<ul class="myList">
<li>...</li>
</ul>
</div>
然後你可以在上面的代碼適應這樣的:
$('.inp_txt').each(function (index, value) {
var $input = $(value);
var $quickSearch = $input.siblings('ul.myList');
$input.quicksearch($quicksearch);
});
這樣,你得到的唯一列表每個文本框。顯然,我不知道你的情景的其餘部分是否知道你的應用程序邏輯中這是否可能 - 但也許。
最後 - 當您添加新控件時,您需要調整創建它們的代碼,以便您也爲它們附加新的處理程序。喜歡的東西:
function addInput(/*... params ...*/) {
/* Do your logic to create the control */
$newInput.quicksearch($newList);
}
在上面的代碼,很顯然,假設您將創建一個$newInput
元素這將是您的新<input type="text" />
- 和一個新的列表,你會打電話$newList
。
我希望這有助於 - 如果沒有,請隨時張貼一些評論和澄清,我會盡量調整我的答案。