1

最初に - 私は JQuery の達人ではありません ;)。複数のクリックを防ぐために、次の解決策があります(最初のクリックのみを尊重し、残りは無視します):

preventMultiClick = function() {
    $(this).unbind("click");
    $(this).bind("click", function() {
        return false;
    });
};
preventMultiSubmit = function() {
    $(this).unbind("submit");
    $(this).bind("submit", function() {
        return false;
    });
};
$("a").one("click", preventMultiClick);
$("#user").one("submit", preventMultiSubmit);

私にとってその解決策はエレガントではありません。だから私はそれを次のものにアップグレードしようとしました:

preventMultiClick = function(event) {
    $(this).unbind(event);
    $(this).bind(event, function() {
        return false;
    });
};
$("a").one("click", preventMultiClick("click"));
$("#user").one("submit", preventMultiClick("submit"));

その解決策は機能しません。誰かが理由を説明したり、関数の引数として与えられたイベントを尊重する関数をどのように書くべきか教えてもらえますか?

4

2 に答える 2

1

問題は、ハンドラーをバインドしているときに関数を呼び出していることです。eventオブジェクトはハンドラーに渡され、eventオブジェクトでもあります。そのプロパティを使用する必要がありtypeます。

var preventMultiClick = function(event) {
    $(this).unbind(event.type);
    $(this).bind(event.type, function() {
        return false;
    });
};

$("a").one("click", preventMultiClick);
$("#user").one("submit", preventMultiClick);
于 2013-01-12T08:35:06.453 に答える
1

問題は、関数参照ではなく、未定義の変数を渡していることです。代わりに、私はこのようなことをします。

preventMultiClick = function(event) {
    $(this).unbind(event.type);
    $(this).bind(event.type, function() {
        return false;
    });
};

$('a').one('click', preventMultiClick);
$('#user').one('submit', preventMultiClick);

各イベントには、そのタイプが含まれています。

于 2013-01-12T08:35:18.717 に答える