Я сделал пользовательскую функцию jquery autoSuggest, которая должна создать div с меню для поля ввода.
Затем я хочу применить его к нескольким полям, но когда я делаю это, он создает несколько div, что отлично. Проблема в том, что все они имеют одинаковый идентификатор. То, что я хотел быть уникальным.
function randomString(length, chars) {
var result = '';
for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))];
return result;
}
$.fn.autoSuggest = function(){
var id = randomString(16, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
if(!$('#autoSuggest_'+id).length) {
$(this).offsetParent()
.append('<div id="autoSuggest_'+id+'">content</div>');
}
var autosuggestDiv = $('#autoSuggest_'+id);
}
Вам нужно зациклиться на входном объекте. Вы можете сделать это, используя $(this).each(...)
или если this
объект уже является объектом jQuery, вы можете просто использовать this.each(...)
. (Спасибо @A. Вольф за это).
Попробуй это:
$.fn.autoSuggest = function() {
return this.each(function() {
var id = randomString(16, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
if(!$('#autoSuggest_'+id).length) {
$(this).offsetParent()
.append('<div id="autoSuggest_'+id+'">content</div>');
}
}
}
this
уже объект jQuery, кстати, чтобы продолжить цепочку, вы должны вернуть его: return this.each(...);
в любом случае +1