0

まず、お読みいただきありがとうございます。
関数の実行を停止するのに問題があります。何をしたいのか、どのようにしようとしているのかを説明しようと思います。
たとえば、要素にいくつかのイベントをバインドa or buttonし、ユーザーがそれを再度クリックしないようにしたいのですが、クリックできることを意味しますが、すべてのアクションはしばらく呼び出されません (たとえば、1 秒)。

そのため、ここにいくつかの例を示します。

htmlで

1st example 
<ul>
   <li><a href="some url" class='button'>Click me</a></li>
   <li><a href="some url" class='button'>Click me</a></li>
   <li><a href="some url" class='button'>Click me</a></li>
</ul>

2nd example somewhere else:
<section id='someid'>
   some info
   some articles - doesn't matter
   <button class='button iLoadComments'>Load more comments</button>
</section>

JavaScriptで:

$("ul").on("click","a.button",function(){
   ... here some code or ajax request, whatever
   return false;
});
$("section").on("click","iLoadComments",function(){
   ... some ajax request
   return false;
})

私はそれを実行させたくありません。そして、1つの関数ですべてのコードをカバーしたい..

だから、私がしたこと:グローバルに新しいイベントリスナーを定義disabledし、その要素に属性を追加します

$("body").on("mousedown", ".button", function(e){
    var $this=$(this);
    if ($this.attr("disabled")) {
        var event = e || window.event;
        if (event.stopPropagation) {
                event.stopPropagation();
        } else {
                event.cancelBubble = true;
        }
        event.preventDefault();
        setTimeout(function () {
           $this.removeAttr("disabled");
        }, 1000); 
        return false;
    }else{
       $this.attr("disabled", true);

    }
});

しかし、問題は委任された関数が何らかの方法で実行されることです ((

誰か助けてください、それはより良い練習ですか?またはその方法を修正する方法は?

4

2 に答える 2

3
var click_enabled  = true;
$("body").on("click",".button",function(){
   if (click_enabled) {
        click_enabled = false;
        setTimeout(function() {
            click_enabled =  true;
        }, 1000);
   } 
   return false;
});

$("ul").on("click","a.button",function(){
    if (!click_enabled)
        return false;
   //... here some code or ajax request, whatever
});
$("section").on("click",".iLoadComments",function(){
    if (!click_enabled)
        return false;
   //... some ajax request
});

http://jsfiddle.net/EAhK4/

于 2013-02-02T17:52:13.183 に答える
2

.oneの代わりに使用できます.on。これにより、ハンドラーは 1 回だけ実行されます。

$("ul").one("click","a.button",function(){
   //... here some code or ajax request, whatever
   return false;
});
于 2013-02-02T17:50:21.900 に答える