我有一個已經有onclick事件和分配函數的按鈕。我希望在它前面添加另一個函數調用。我可以想象應該可以擺弄onclick屬性(attr
),但我不認爲這是最佳做法。使用JQuery預先在按鈕上執行onclick動作
你認爲最好的做法是在現有的onclick事件上預先調用一個函數嗎?
我有一個已經有onclick事件和分配函數的按鈕。我希望在它前面添加另一個函數調用。我可以想象應該可以擺弄onclick屬性(attr
),但我不認爲這是最佳做法。使用JQuery預先在按鈕上執行onclick動作
你認爲最好的做法是在現有的onclick事件上預先調用一個函數嗎?
如果你不怕惹的jQuery的膽量:
// "prepend event" functionality as a jQuery plugin
$.fn.extend({
prependEvent: function (event, handler) {
return this.each(function() {
var events = $(this).data("events"),
currentHandler;
if (events && events[event].length > 0) {
currentHandler = events[event][0].handler;
events[event][0].handler = function() {
handler.apply(this, arguments);
currentHandler.apply(this, arguments);
}
}
});
}
});
$("#someElement").prependEvent("click", function() {
whatever();
});
親身體驗:http://jsfiddle.net/Tomalak/JtY7H/1/請注意,必須已有currentHandler
或該函數將不會執行任何操作。
免責聲明:我認爲這是一個破解。這取決於jQuery內部結構,這可能會在下一個版本的庫中發生變化。它現在可以工作(我測試了jQuery 1.7.2),但是如果它與未來版本的jQuery打交道,不要感到驚訝。
這真棒... – 2012-04-17 14:22:34
我花了最後3個小時試圖「預先安排一個事件」。 @Tomalak,你搖滾! – frnhr 2012-10-22 06:10:36
'//任何',真的:-) – 2014-03-25 06:01:18
您可以在單個事件上添加功能,但我嘗試避免onclick事件的兩個函數。相反,您可以
1.在現有功能中添加新代碼。
2.從現有功能添加對新功能的調用。
如果你已經綁定這樣
$(elem).on('click', functionName);
事件中,你可以修改,像這樣:
$(elem).on('click', function(){
anotherFunctionNameOrWhateverYouWant();
functionName();
});
我不認爲有一種方式來預先考慮在現有的函數調用的onclick事件,但你可以試試這個:
$('#foo').unbind('click');
$('#foo').click(function() {
// do new function call..
// call original function again...
});
希望有所幫助。
哎呀錯過了..你絕對正確@micha – marknatividad 2012-04-16 07:04:50
我可以以某種方式'獲取'當前的點擊方法,解除綁定,打電話給我自己的方法,然後調用已經在點擊方法中的「無論」? – 2012-06-05 11:08:17
我已經寫在這裏短暫example:
$("button").click(function() { // this is already existing
if ($("span").length) {
alert("ok");
}
});
var clicks = $("button").data("events").click.slice();
$("button")
.unbind("click")
.click(function() { // this is the new one which should be prepended
$("body").append($("<span>"));
});
$.each(clicks, function(i, v) {
$("button").click(v);
});
[jQuery事件的可能的重複:預先回調處理程序已經存在](http://stackoverflow.com/questions/9052349/jquery-events-prepend-a-callback-handler-to-already-existing -ones) – 2014-04-14 14:01:52