jQuery onblur не работает

$('#lPass').focus(function() {  
        if (this.value == this.defaultValue) this.value = '';
        $(this).after('<input type="password" id="lPass" size="10" value="'+this.value+'"/>').remove();
}).blur(function() {
    alert(1);
});

<input id="lPass" type="text" size="10" value="Password"/>


onblur не работает.
Есть идеи?

3 ответов


использовать live вместо фокуса и размытость

.live () устарел. Использовать .on () и .off () вместо.

потому что вы добавляете ввод во время выполнения, поэтому он добавляет на страницу без событий, live:

прикрепить обработчик к событию для всех элементы, соответствующие текущему селектор, сейчас или в будущее.

пример:

$('#lPass').on('focus', function() {
    if (this.value == this.defaultValue) this.value = '';
    $(this).after('<input type="password" id="lPass" size="10" value="' + this.value + '"/>').remove();
});


$('#lPass').on('blur', function() {
    alert(1);
});

Это для вашего точного кода:

$('#lPass').live('focus', function() {  
    if (this.value == this.defaultValue) this.value = '';
    $(this).after('<input type="password" id="lPass" size="10" value="'+this.value+'"/>').remove();
}).live('blur', function() {
    alert(1);
});

первая проблема, которую я вижу, заключается в том, что ваш селектор является идентификатором #lPass, но в этом селекторе вы пытаетесь вставить новый тег с тем же идентификатором. ID должен быть уникальным на странице. Затем вы пытаетесь удалить с помощью .удалить() - кажется, не имеет смысла для меня.

просто использовать .удалить() или использовать новый идентификатор...

или уточнить, что вы хотите сделать.

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