2011-05-25 99 views
2

我有這兩個HTML表單按鈕與每個關聯的onclick動作。比較使用javascript的兩個html按鈕的onclick動作

<input type=button name=sel value="Select all" onclick="alert('Error!');"> 
<input type=button name=desel value="Deselect all" onclick="alert('Error!');"> 

不幸的是,這個動作會不時變化。它可以是

onclick="";> 

onclick="alert('Error!');" 

onclick="checkAll('stato_nave');" 

我想如果需要寫一些JavaScript代碼驗證什麼是調用的函數,並改變它:

var button=document.getElementsByName('sel')[0]; 
// I don't want to change it when it is empty or calls the 'checkAll' function 
if(button.getAttribute("onclick") != "checkAll('stato_nave');" && 
    button.getAttribute("onclick") != ""){ 
    //modify button 
    document.getElementsByName('sel')[0].setAttribute("onclick","set(1)"); 
    document.getElementsByName('desel')[0].setAttribute("onclick","set(0)"); 
} //set(1) and set(0) being two irrelevant function 

Unfortuna完全沒有這項工作。 去背一些步驟,我注意到

alert(document.getElementsByName('sel')[0].onclick); 

不輸出的onclick內容,如我所料,但產出:

function onclick(event) { 
    alert("Error!"); 
} 

,所以我想的是,比較失敗,因爲這個原因,我不能比較一個function與一個string
有沒有人猜測如何區分哪個函數與onclick屬性關聯?

+0

這將幫助你,但它是基於jQuery的http:/ /stackoverflow.com/questions/5343832/change-value-of-onclick-function-vars – VirtualTroll 2011-05-25 18:49:19

回答

0

這工作

http://jsfiddle.net/mplungjan/HzvEh/

var button=document.getElementsByName('desel')[0]; 
// I don't want to change it when it is empty or calls the 'checkAll' function 
var click = button.getAttribute("onclick"); 
if (click.indexOf('error')) { 

    document.getElementsByName('sel')[0].onclick=function() {setIt(1)}; 
    document.getElementsByName('desel')[0].onclick=function() {setIt(0)}; 

} 

function setIt(num) { alert(num)} 

但是,爲什麼不的onclick移動到一個腳本

window.onload=function() { 
    var button1 = document.getElementsByName('sel')[0]; 
    var button2 = document.getElementsByName('desel')[0]; 
    if (somereason && someotherreason) { 
    button1.onclick=function() { 
     sel(1); 
    } 
    button2.onclick=function() { 
     sel(0); 
    } 
    } 
    else if (somereason) { 
    button1.onclick=function() { 
     alert("Error"); 
    } 
    } 
    else if (someotherreason) { 
    button1.onclick=function() { 
     checkAll('stato_nave') 
    } 
    } 
} 
0

嘗試鑄造onclick屬性爲string。那麼你至少可以檢查checkAll的索引以及它是否爲空。之後,您可以輕鬆地將這些input元素綁定到新的onclick函數。


var sel = document.getElementsByName('sel')[0]; 
var desel = document.getElementsByName('desel')[0]; 

var onclick = sel.getAttribute("onclick").toString(); 

if (onclick.indexOf("checkAll") == -1 && onclick != "") { 
    sel.onclick = function() { set(1) }; 
    desel.onclick = function() { set(0) }; 
} 

function set(number) 
{ 
    alert("worked! : " + number); 
} 

工作示例:http://jsfiddle.net/fAJ6v/1/


工作示例時,有一個checkAll方法:http://jsfiddle.net/fAJ6v/3/