开发者

Compare onclick action of two html button using javascript

I have this two HTML Form buttons with an onclick action associated t开发者_JAVA百科o each one.

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

Unfortunately this action changes from time to time. It can be

onclick="";>

or

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

or

onclick="checkAll('stato_nave');"  

I'm trying to write some javascript code that verifies what is the function invoked and change it if needed:

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

Unfortunately none of this work. Going back some steps I noticed that

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

does not output the onclick content, as I expected, but outputs:

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

So i guess that the comparisons fails for this reason, I cannot compare a function with a string.

Does anyone has a guess on how to distinguish which function is associated to the onclick attribute?


This works

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)}

But why not move the onclick to a script

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')
    }
  }
}


Try casting the onclick attribute to a string. Then you can at least check the index of checkAll and whether it is empty. After that you can bind those input elements to the new onclick functions easily.


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);
}

working example: http://jsfiddle.net/fAJ6v/1/


working example when there is a checkAll method: http://jsfiddle.net/fAJ6v/3/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜