2012-02-28 9 views
0

このことはうまくいきますが、私が取得したい要素をクリックするたびに、クリック数をカウントして、同じ数の合計クリック数でログコメントを印刷します。jQuery focusoutイベント

たとえば、要素を3回連続してクリックして(そしてフォーカスアウトをトリガーするために外部をクリックすると)、3つのログコメントを印刷します。次に2回以上クリックすると、5が表示されます(そして再び外側になります)5 logコメント。

私は要素の外側をクリックするたびに1つだけlogのコメントを取得したいと思います。

助けてください?

$("#main-wrapper").click(function (e) { 
    var contenteditable = $(e.target).attr('contenteditable'); 
    if (contenteditable == 'true') { 
     $(e.target).focusout(function() { 
      var content = $(this).html(); 
      console.log("get: " + content); 
     }); 
    };   
}); 

答えて

2

イベントのバインドを解除してください。

$("#main-wrapper").click(function (e) { 
var contenteditable = $(e.target).attr('contenteditable'); 
if (contenteditable == 'true') { 
    $(e.target).unbind('focusout').focusout(function() { 
     var content = $(this).html(); 
     console.log("get: " + content); 
    }); 
};   
}); 
+0

私が間違っていない限り、これは 'click'ハンドラもアンバインドするので、これは最初のクリックに対してのみ機能します。しかし、あなたは 'unbind( 'focusout')を実行することができます。 –

+0

は完璧に機能します!どうもありがとう!!!! – user1095749

0

新しいfocusoutイベントハンドラにあなたがclickを処理するたびに添付されています。これらのイベントハンドラは、に置き換えられていますが、が追加されています。が追加され、イベントがトリガされたときに各イベントハンドラが実行されます。そのため、以前のクリックと同じ数のログメッセージが取得されます。

ハンドブックを1回だけ指定することはできますが、どのようにトリガーするかは、実行する内容によって異なります。

$("#main-wrapper").focusout(function (e) { 
    var contenteditable = $(e.target).attr('contenteditable'); 
    if (contenteditable == 'true') { 
    var content = $(this).html(); 
    console.log("get: " + content); 
    }   
});