【问题标题】:Compare onclick action of two html button using javascript使用javascript比较两个html按钮的onclick动作
【发布时间】:2011-05-25 18:32:37
【问题描述】:

我有这两个 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 属性相关联?

【问题讨论】:

标签: javascript html function onclick compare


【解决方案1】:

这行得通

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

【讨论】:

    【解决方案2】:

    尝试将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/

    【讨论】:

      猜你喜欢
      • 2019-08-11
      • 2012-05-19
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多