jQuery事件的通用函数

tjjdgumg  于 2022-11-03  发布在  jQuery
关注(0)|答案(2)|浏览(114)

我有以下解决方案,以防止多次点击(尊重只有第一个,忽略其余):

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"));

这个解决方案不起作用,有人能解释一下为什么或者告诉我,函数的参数应该如何写吗?

rkue9o1l

rkue9o1l1#

问题是在绑定处理程序时调用函数,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);
ufj5ltwl

ufj5ltwl2#

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

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

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

每个事件都包含其类型。

相关问题