JQuery не обновляется: последний фильтр для динамически добавляемых элементов - PullRequest
0 голосов
/ 04 января 2012

Извините, если об этом уже спрашивали, но я в некотором роде.Я создаю функцию JavaScript для динамического добавления входных данных формы, когда пользователь фокусируется на конкретном вводе текста HTML (потому что у нас есть возможность принимать более одного значения).Я подумал, что сделать это будет проще, чем выбрать необходимое количество входов в раскрывающемся меню.

Вот как я могу добавить новые входные данные формы:

$("input[type=text]").filter(":regex(id, roe[0-9])").filter(":last").on("focus", function() {
    // Add in new elements here
}

Когда я обновляю страницу и фокусируюсь на исходном вводе текста с идентификатором «roe0», JQuery генерирует новый ввод именно так, как я хочу.Однако когда я сосредотачиваюсь на вновь сгенерированном вводе, ничего не происходит.Затем я должен сосредоточиться на исходном $(#roe0) вводе, чтобы сгенерировать новый ввод текста.

Кто-нибудь знает решение этой проблемы?Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

2 голосов
/ 04 января 2012

Он будет применен только один раз и к последнему элементу во время применения. Вам нужно будет повторно применить его к вновь созданному элементу. Здесь было бы неплохо использовать механизм связывания событий jQuerys .one(). Как это будет необходимо удалить привязку на элемент, как только событие запускается в первый раз (один раз).

1 голос
/ 04 января 2012

Ну, дело в том, что вы выбираете один элемент (последний при загрузке страницы) и присоединяете к нему обработчик событий.Тогда больше ничего не делается, поэтому имеет смысл, что любые новые элементы, которые вы создаете, не будут обрабатывать эти события.

Я бы сделал что-то вроде этого:

function createNewElement(e) {
    var newElement = jQuery('<input />');
    // Whatever logic you have to append the new input and such
    newElement.one("focus", createNewElement);
}

$("input[type=text]").filter(":regex(id, roe[0-9])").filter(":last").one("focus", createNewElement);

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

Как сказано в другом ответе, было бы хорошо использовать one вместо on.Он будет отсоединять обработчик события, как только он будет выполнен один раз (что хорошо, потому что новый элемент должен быть таким, который теперь имеет обработчик события)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...