我正在尝试为jquery编写一个简单的自动完成插件(用于学习目的)。 如果你在JS运行之后查看DOM,那么在输入字段之后会有div,但只有第二个在其中有ul。为什么?它应该在两个输入上都相同,不应该吗?
http://jsbin.com/avomez/1/edit这是我的代码:
HTML
<input class="city" type="text" />
<input class="city" type="text" />
JS
$.fn.autocomplete = function(){
var self = $(this);
var drpd = $('<div class="dropdown" />');
var ul = $('<ul class="city" />');
self.after(drpd);
drpd.append(ul);
};
$("input.city").autocomplete();
答案 0 :(得分:1)
添加此行
$.fn.autocomplete = function(){
return this.each(function(){ //ADD
var self = $(this);
var drpd = $('<div class="dropdown" />');
var ul = $('<ul class="city" />');
self.after(drpd);
drpd.append(ul);
}); //ADD
};
答案 1 :(得分:1)
你需要迭代并返回this
(jQuery对象)来制作一个插件。见下文,
DEMO: http://jsbin.com/avomez/3/
<强>原因:强>
$('input.city')
返回一个元素数组,你应该迭代单个元素,以确保你没有弄乱它。你原来的问题就是一个很好的例子。$('input.city').autocomplete().addClass('someclass');
<强>代码:强>
$.fn.autocomplete = function(){
return this.each(function () {
var self = $(this);
var drpd = $('<div class="dropdown" />');
var ul = $('<ul class="city" />');
self.after(drpd);
drpd.append(ul);
});
};
答案 2 :(得分:0)
尝试使用change
事件来查找正确的输入:
$("input.city").change(function(){
$(this).autocomplete();
});