Как получить идентификатор элемента из динамически генерируемых элементов формы с помощью jquery? - PullRequest
3 голосов
/ 24 мая 2011

Чтобы попробовать концепцию, я делаю очень простой тест.

Я получил форму с вводом текста с самого начала. Когда я нажимаю на поле, я хочу захватить его Id и добавить значение к тексту ввода.

$(document).ready(function() {
    $('input').focus(function() {
        var currentId = $(this).attr('id');
       $("#"+currentId).val('blah');
    });
});

Это прекрасно работает с начальными полями, но перестает работать с полями, добавленными с помощью вызовов ajax.

Хитрость в том, что пользователи могут щелкать любое поле, и я не знаю, какое, пока они не щелкают. Мои идентификаторы выглядят так:

experience0-CompanyName //(original one)
experience[n]-CompanyName

(часть [n] также используется для упорядочения полей в форме, поскольку элементы сгруппированы по опыту, навыкам образования и т. Д. *

как мне этого добиться?

Ответы [ 4 ]

5 голосов
/ 24 мая 2011

Простое изменение:

$(document).ready(function() {
    $('input').live("focus", function() {
        var currentId = $(this).attr('id');
       $("#"+currentId).val('blah');
    });
});

.focus связывает только те элементы, которые существуют во время его вызова. .live() связывает функцию с событием для всех существующих элементов и любых, которые добавляются в DOM позже.

2 голосов
/ 09 июня 2014

Предыдущие ответы больше не подходят.Они полагаются на jQuery.live, который сейчас устарел.В jQuery 1.11 вызов jQuery.live вызывает ошибку.В настоящее время предпочтительным решением является использование jQuery.on.Реализация приведенного выше кода jQuery.live будет выглядеть следующим образом.Второй параметр, в настоящее время установленный на «: input», может быть заменен селектором, который соответствует вашим потребностям.

$( "body" ).on('focus', ":input", function() {
    var currentId = $(this).attr('id');
    $("#"+currentId).val('blah');
});
1 голос
/ 24 мая 2011

Это может быть проще (не нужно получать ID и искать по нему):

$(document).ready(function() {
    $('input').live('focus', function() {
        $(this).val('blah');
    });
});
0 голосов
/ 24 мая 2011

Я полагаю, вы используете $("<someid>").focus(<function>).Это работает с уже загруженным документом, а не с добавленными новыми тегами.

Try using $("<someid>").live("focus", <function>);

Также взгляните на веб-сайт jquery.Они получили довольно хорошую документацию с примерами.Для живого проверить это http://api.jquery.com/live/

...