2009-10-12 71 views
2
<input type="button" onclick="executes second" /> 

$('input').click(function() { //this first }} 

p.s.的onclick = 「執行第二」 - 不能被刪除(其__doPostBack)如何綁定jquery事件在標記執行事件之前

+0

你爲什麼要兩個click事件添加到同一按鈕? – rahul 2009-10-12 09:50:22

+0

onclick =「執行第二次」 - 這裏是doPostBack – 2009-10-12 09:52:14

+3

我想很多人通過提供簡單的答案來回答你的問題,因爲你的主要問題在問題中不太清楚。我建議你編輯一下這個問題,以明確從Asp.net doPostBack函數添加onClick事件。 – 2009-10-12 11:30:16

回答

0

我的猜測是內聯,因爲它已經由ASP.NET被輸出onclick處理程序無法刪除。爲了解決這個問題,你需要重寫ASP.NET的doPostBack方法,在回發發生之前注入你的函數。嘗試,包括在你的頁面下面的函數的地方,然後用它來添加事件處理程序:

更新:只是重新閱讀,實現這個答案稍差的標誌 - 它基本上可以讓你火回發之前事件,但不一定附加到按鈕的onclick處理程序。

var addToPostBack = function(func) { 
    var old__doPostBack = __doPostBack; 
    if (typeof __doPostBack != 'function') { 
     __doPostBack = func; 
    } else { 
     __doPostBack = function() { 
      func(); 
      old__doPostBack.apply(this, arguments); 
     } 
    } 
}; 

... 

<input type="button" id="btn" onclick="..." /> 

... 

addToPostBack(function() { alert("You're posting back!"); }); 
0

如果您使用jQuery的是沒有必要把的onclick到HTML:

$('input').click(function() { 
    //this first 
    something(); 
    // this last 
    playSound(); 
}); 

編輯:
只是刪除的onclick使用jQuery屬性:

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

,你可以把它裏面的文件準備好,或者只是將其連接到您的通話

$('input').removeAttr("onclick").click(function() {...}); 
+0

我不會把它放在...它是doPostBack !!!!! – 2009-10-12 09:54:34

+1

這將停止可能不需要的回發燒制。 – 2009-10-12 10:57:41

+0

@Luke這個想法是用jQuery來替代它。 – googletorp 2009-10-12 11:24:34

2

你不能只是這樣做:

< input type="button" onclick="do_something();" /> 

function do_something() { 
    // this first 
    // then second? 
}} 
+0

這並不理想,如果do_sometihng()最初是在其他地方定義的,並且不容易複製等。 – googletorp 2009-10-12 11:29:30

4

試...

$(document).ready(function(){ 
    $("input").removeAttr("onclick"); 
    $("input").click(function(){ 
     // do first 
     my_first_function();     
     // do second 
     my_second_function(); 
     return false;    
    }); 
});