我试图创建一个通用的自动完成脚本使用jQueryUI。自动填充应适用于每个:
<input type='text' class='autocomplete' id='foo'/> <input type='text' class='autocomplete' id='bar'/> ...
现在我试图访问’foo’或’bar’在源函数中使用$(this),但是当提醒我总是得到’未定义’。
$('input.autocomplete').autocomplete({ source: function(req,add){ var id = $(this).attr('id'); alert(id); } });
我究竟做错了什么?
解决方法
单独为您选择的每个项目设置自动填充,使用闭包来保存对相关元素的引用。类似以下内容:
$('input.autocomplete').each(function(i,el) { el = $(el); el.autocomplete({ source: function(req,add) { var id = el.attr('id'); alert(id); } }); });
替代(编辑)
我不明白为什么有这样的抵抗使用each():它的工作,代码是非常清晰和可读性,它不会引入效率的问题;但如果你决心避免每个(),这里有一个替代…
*请注意:以下方法依赖于(一点点)jQuery Autocomplete的内部,所以我建议第一个选项…但选择是你的。
$('input.autocomplete').autocomplete({ source: function(req,add) { var id = this.element.attr('id'); alert(id); } }); });
这将工作,至少直到/除非他们改变source()函数从自动完成插件内调用的方式。
所以,你有两个选择…对每个人来说。