Javascript JQuery事件的通用函数

Javascript JQuery事件的通用函数,javascript,javascript-events,jquery,Javascript,Javascript Events,Jquery,一开始,我不是JQuery;)的大师。我有以下解决方案来防止多次点击(只尊重第一个,忽略其余的): 对我来说,这个解决方案并不优雅,我认为应该如此。因此,我尝试将其升级到以下版本: preventMultiClick = function(event) { $(this).unbind(event); $(this).bind(event, function() { return false; }); }; $("a").one("click", prev

一开始,我不是JQuery;)的大师。我有以下解决方案来防止多次点击(只尊重第一个,忽略其余的):

对我来说,这个解决方案并不优雅,我认为应该如此。因此,我尝试将其升级到以下版本:

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

而这个解决方案不起作用。有人能解释一下为什么或者告诉我应该如何编写作为函数参数给出的与事件相关的函数吗?

问题是,当绑定处理程序时,您正在调用函数,
事件
对象被传递给处理程序,而且
事件
是一个对象,您应该使用它的
类型
属性

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

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

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

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

$('a').one('click', preventMultiClick);
$('#user').one('submit', preventMultiClick);
每个事件都包含它的类型

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

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