web-dev-qa-db-ja.com

jQueryonblurが機能しない

$('#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機能していません。
何か案は?

11
Isis

フォーカスとブラーの代わりに live を使用します

.live()は非推奨になりました。代わりに 。on() および 。off() を使用してください。

実行時に入力を追加しているため、イベントなしでページに追加されます。

現在または将来、現在のセレクターに一致するすべての要素のイベントにハンドラーをアタッチします。

例:

$('#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);
});
28
Amr Elgarhy

あなたの正確なコードのためにこれ:

$('#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);
});
2
Nick Craver

私が最初に目にする問題は、セレクターが#lPassのIDであるにもかかわらず、そのセレクター内で同じIDの新しいタグを挿入しようとしていることです。 IDはページ上で一意である必要があります。次に、.remove()を使用して削除しようとします-私には意味がないようです。

.remove()を使用するか、新しいIDを使用してください...

または、やりたいことを明確にします。

.blurについては、blurを使用しますが、IDを修正する必要があります。または、追加したNEWフィールドをぼかしたい場合は、他の人が提案するように.live()を使用します。

2