使用javascript比较两个html按钮的onclick动作

时间:2011-05-25 18:32:37

标签: javascript html function onclick compare

我有两个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

不幸的是,这都不起作用。 回过头来,我注意到了

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

不会像我预期的那样输出onclick内容,但输出:

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

因此我认为比较因此失败,我无法将functionstring进行比较。
有没有人猜测如何区分哪个函数与onclick属性相关联?

2 个答案:

答案 0 :(得分: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')
    }
  }
}

答案 1 :(得分: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/