您遇到的问题是您的语法将单个插件实例应用于选择器中的所有项目。
$('.inp_txt').quicksearch(...)
就像调用('.inp_txt').click(...)
- 您将获得一个处理程序,用于每个匹配的元素。
要解决此问题,您需要执行以下操作:
$('.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);
});
此代码将遍历每个.inp_txt
项目并为每个项目应用一个唯一的处理程序。
在您的场景中,听起来您只有一个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
.
我希望这会有所帮助 - 如果没有,请随时发表一些评论并澄清,我会尝试调整我的答案。