JQuery事件的通用函数

时间:2013-01-12 08:27:11

标签: javascript javascript-events jquery

一开始 - 我不是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"));

并且该解决方案不起作用。有人可以解释为什么或告诉我如何写出作为函数参数给出的关于事件的函数?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

问题是你传入一个未定义的变量而不是函数引用。相反,我会做这样的事情。

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

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

每个事件都包含它的类型。