Дублированные объекты, созданные функцией jquery

0

Я сделал пользовательскую функцию 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);
}
  • 0
    Вам действительно нужно использовать идентификаторы?
  • 0
    да, потому что это подтягивает разные данные в зависимости от идентификатора
Показать ещё 3 комментария
Теги:

1 ответ

3
Лучший ответ

Вам нужно зациклиться на входном объекте. Вы можете сделать это, используя $(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>');
        }
    }      
}
  • 1
    this уже объект jQuery, кстати, чтобы продолжить цепочку, вы должны вернуть его: return this.each(...); в любом случае +1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню