Используйте из `$ .each` в несколько раз отдельно. - PullRequest
0 голосов
/ 10 сентября 2011

После поиска и щелчка по результатам поиска и нажатия на плюс (кнопка «Добавить ввод») рядом с вводом «ВСТАВИТЬ ЗНАЧЕНИЕ ЗДЕСЬ» в примере, в новом вводе $('.auto_complete').keyup(function () { ... не работает.

Я считаю, что нужно связывать события отдельно и использовать замыкание , чтобы у каждого элемента был свой набор переменных (или изменить логику , чтобы использовать только значение в поле и не нужно никаких переменных состояния),

как это?

ПРИМЕР: см. Здесь

Js полный код: http://jsfiddle.net/6yPxn/

$ каждый:.

var ac = $(this).text();
var ok = $.grep(data, function (e) {
    return e.name == ac;
})[0].units;
$.each(ok, function (bu, key) {
    //alert(key.name_units);
    $("<div class='mediumCell'/>").hide().fadeIn('slow').append('<b>' + key.name_units + '</b>', $('<div class="column" style="float: left;" />')).appendTo(".list_units");
});

1 Ответ

1 голос
/ 10 сентября 2011

Он работает нормально, но я не вижу нигде в том коде, который вы указали, где вы добавляете обработчик событий в поле ввода.

Проблема в http://www.binboy.gigfa.com/files/js/admin.js, где-то сверху:

$('.auto_complete').bind('keyup',function () {
 /* ... */
});

Когда страница загружается, она связывает несколько обработчиков событий с полями ввода и т.п. Когда вы создаете новый, эта функция добавляется , а не , если только вы не используете jQuery .live или что-то подобное. Как отмечено в документации:

Этот метод [.live()] является разновидностью базового метода .bind() для присоединения обработчиков событий к элементам. Когда вызывается .bind(), элементы, на которые ссылается объект jQuery, подключают обработчик; элементы, которые вводятся позже, этого не делают, поэтому им потребуется еще один вызов .bind().

На самом деле я не хочу разбираться во всех вложенных вызовах click и delegate и bind, но я гарантирую, что именно в этом ваша проблема. Чтобы исправить это, вам, вероятно, понадобится запустить секцию автозаполнения на только что созданном узле, вместо этого использовать .live или просто .clone оригинал.

...