2013-01-12 20 views
1

開頭 - 我不是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")); 

並且該解決方案不起作用。有人可以解釋爲什麼或告訴我應如何寫出函數參數給定的函數?

回答

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); 
+0

偉大的思想認爲一樣我想。 –

+0

它的工作原理。非常感謝你! –

1

問題是,您傳入未定義的變量而不是函數引用。相反,我會做這樣的事情。

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

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

每個事件都包含它的類型。