2015-02-09 75 views
1

是否有可能改變事件的順序來調用警報功能,並首先發送消息Huh?,然後纔會發出下一個提示'Yeah!'。信息?JavaScript:如何改變事件的順序?

<div class="elem" onclick="alert('Yeah!')"></div> 

我的jQuery代碼。

$('.elem').click(function() { 
    alert('Huh?'); 
}) 

鏈接的jsfiddle:http://jsfiddle.net/84Lyq3n9/

+0

如果僅使用。點擊(),它很容易http://jsfiddle.net/84Lyq3n9/1/ – Musa 2015-02-09 00:06:28

+0

但我不能刪除內嵌事件'onclick'。那麼也許還有另一個優雅的方法? – Alex 2015-02-09 00:07:48

+0

你可以改變onclick的價值嗎?您可以將其引用到一個自定義函數,該函數以您喜歡的任何順序調用這兩個警報。 – FuriousD 2015-02-09 00:12:46

回答

2

如何:

var inline_click_handler_src = $('.elem').attr('onclick'); 
var inline_click_handler = new Function('e', inline_click_handler_src); 
$('.elem').removeAttr('onclick'); 

$('.elem').click(function() { 
    alert('Huh?'); 
    inline_click_handler(); 
}); 

[編輯]或不用標記內容搞混:

var el = $('.elem').get(0); 
var inline_click_handler = el.onclick; 
el.onclick = null; 

$('.elem').click(function() { 
    alert('Huh?'); 
    inline_click_handler(); 
}); 

[還有一個編輯在如果您的內聯點擊處理程序使用this,請使用function.call() t執行上下文:

var el = $('.elem').get(0); 
var inline_click_handler = el.onclick; 
el.onclick = null; 

$('.elem').click(function() { 
    alert('Huh?'); 
    inline_click_handler.call(el); 
}); 
+0

很好的解決方案。但是也許有一個選項沒有刪除屬性('$('。elem')。removeAttr('onclick')')? – Alex 2015-02-09 00:29:13

+0

看起來有可能,我再給它一次,並更新我的答案。請嘗試(在鉻中爲我工作) – 2015-02-09 00:39:27

0

但是你可以用很多方法來做到這一點。 首先,您可以刪除屬性「onclick」。您可以使用javascript來完成。

$('.elem').removeAttr("onclick"); 
 

 
$('.elem').click(function() { 
 
    alert('Whatever you want'); 
 
    alert('Huh?'); 
 
})

這裏是一個鏈接:http://www.w3docs.com/learn-javascript/javascript-events.html