4

私は自分のニーズに合わせて .one() を使用することについて研究を尽くし、クラスセレクターインスタンスごとに正しく動作するようにしました。ただし、jQuery.com では、次のように動作すると述べています。一度クリックすると、同じクラス セレクターで別の要素をクリックすると、再度実行されません。しかし、それは私にはうまくいきません。1 つのページに同じ特定のクラス セレクターが必要です。

jQuery.comが例として提供するコードは次のとおりです。

$("#foo").one("click", function() {
alert("This will be displayed only once.");
});
$("body").one("click", ".foo", function() {
alert("This displays once for the first .foo clicked in the body.");
});

上記の2番目のものは、それが言うように機能しないようです。これを実際に機能させる方法を知っている人はいますか。いくつかの場所に .foo を配置できますが、.foo の 1 つがクリックされた後、関数は 1 回しか表示されません。別の .foo をクリックすると、関数が実行されなくなりますか? ヘルプ/提案をありがとうございました。

4

2 に答える 2

0

このコメントで説明されているように、これはです。正しく読み取られると ( dystroy が言うように、あまりよく書かれていません)、ハンドラーはセレクターに一致する最初の要素に対して1回だけ起動します。

これを要素ごと に 1回しか発生させないよう.fooにするには、自分でこれを行う必要があります (使用one()からon()に切り替え、レート制限を自分で処理することに注意してください。

$("body").on("click", ".foo", function() {
    var self = $(this);

    if (!self.data('fired')) {
        self.data('fired', true);

        alert("This displays once for each .foo clicked in the body.");
    }
});

http://jsfiddle.net/Zdqpp/1/

于 2012-12-08T12:07:55.597 に答える
0

あなたはこれで試すことができます:

$(function(){
   $(".foo").one("click",function(event) {
      alert("This displays once for the first .foo clicked in the body.");
   });
});

これだけヒット.fooalert for one timeます。リロードせずにもう一度ヒットすると、アラートは表示されません。

フィドル: http://jsbin.com/eluquq/1/edit

于 2012-12-08T12:42:12.267 に答える