6

入力フィールドを持つ単純な「無限」フォームを作成しました。空の入力がフォーカスされるたびに新しい入力が作成され、空の入力フィールドがぼやけると、フィールドは削除されます。

ここで例を参照してください

次のコードを使用して、すべてを実現します。

var $input = $('<div/>').html( $('<input/>').addClass('value') );
$('form').append( $input.clone() );

$('form').on( 'focus', 'input.value', function(e) {

    // Add new input if the focused one is empty
    if(!$.trim(this.value).length) {
        $('form').append( $input.clone() );
    }


}).on( 'blur', 'input.value', function(e) {
    var $this = $(this);

    if( !$.trim(this.value).length ) {
        console.log('REMOVING INPUT');
        $this.parent().remove();
    } else {
        $this.attr('name', 'item-'+$this.val());
    }

});

ただし、Chrome では、blur別のアプリケーションに切り替えるとイベントが 2 回発生するという問題があります ( tab)。ノードはすでに削除されているため、ノードを削除することはできないため、これによりエラーが発生します。

Uncaught Error: NOT_FOUND_ERR: DOM Exception 8 

Firefox は正常に動作しているようです。

では、なぜblurイベントが 2 回発生するのでしょうか?また、それを防ぐにはどうすればよいでしょうか?

編集-この質問の答えを試しましたが、うまくいきませんでした。Chrome でまだエラー メッセージが表示されます。何が間違っているのでしょうか?

更新されたフィドルを参照してください

要素がまだ存在するかどうかを確認する方法はありますか? 2 回目のblur起動により、ノードが削除されます。$(this).lengthそれでもゼロではありません。

4

2 に答える 2

0

これは Blink のバグのようです。Chromium プロジェクトのページにバグ レポートがあります: http://code.google.com/p/chromium/issues/detail?id=253253

于 2013-11-04T15:43:23.417 に答える
0

このフィドルが必要な動作をしているかどうかを確認してください http://jsfiddle.net/EPxkh/8/

http://www.quirksmode.org/js/introevents.html

http://www.quirksmode.org/js/events_order.html

http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html

于 2012-06-23T13:44:48.037 に答える