多个函数onClick()不起作用

时间:2012-08-27 08:52:07

标签: javascript

下面是我在一个按钮上用于多个java脚本的代码。但是当我禁用第二个时,只有任何一个正在工作。请让我知道:如何更改我的代码以使其正常工作?

function invoke(but)  
{  
if(but==0)   
    {  
        function move(){  
        document.getElementById('tgt1').value = 
        document.getElementById('Allocation').value;  
        document.getElementById('Allocation').value="";  
        document.getElementById("Send").disabled=true;  

    }document.myform.action="Alloc_Insert.do";  
    }  
           else if(but==1)  
   {  
       document.myform.action="";  
   }  

else if(but==2){ document.myform.action="WL_Verif.do";}  
else if(but==3){ document.myform.action="Add_Query.do";}  
document.myform.submit();  
        } 

html如下:

<input type="Submit" value="Allocate" id="Send" name="submit" onClick="invoke(0);move();"/><br/>  

4 个答案:

答案 0 :(得分:1)

注意'move'函数未在'invoke'函数之外声明。

然后;

将它们包装在自调用函数中:

onclick="(function(){ invoke(0);move(); })();"

或附加事件处理程序(通常是首选)

div.attachEventListener('click', function () { ... }); // DOM 3
div.attachEvent('click', function () { ... }); // IE

答案 1 :(得分:1)

您的功能以奇怪的方式声明。您在 move中定义了invoke ,我认为您并不想要。如果您想拥有两个功能,请将move 放在invoke之外,如下所示:

function move(){
  document.getElementById('tgt1').value =
    document.getElementById('Allocation').value;
  document.getElementById('Allocation').value="";
  document.getElementById("Send").disabled=true;
}

function invoke(but)
{
  if(but==0)
  {
    move();
    document.myform.action="Alloc_Insert.do";
  }
  else if(but==1)
  {
    document.myform.action="";
  }
  else if(but==2){ document.myform.action="WL_Verif.do";}
  else if(but==3){ document.myform.action="Add_Query.do";}
  document.myform.submit();
}

注意:在HTML中使用onClick通常不是一个好主意 - 最好将它放在JavaScript中。

答案 2 :(得分:1)

将按钮名称更改为“提交”

以外的其他名称

解释会发生什么:

当您将名称属性“submit”分配给按钮(或任何其他表单元素)时,可以通过

访问此元素
document.myform.submit

但是还有表单的内置方法:submit(),您也可以使用

访问它
document.myform.submit

现在拨打document.myform.submit()

时会发生什么

我会把代码写得有点不同,你会发现麻烦:

document.myform['submit']()

代码不是访问内置方法,而是首先指向form-element,然后尝试执行该方法。但是form-element不是一个方法,它都会以错误结束,而脚本的其余部分(包括move()的调用)将不会被执行。

与“reset”相同,你永远不应该使用form-element的内置属性/方法的名称作为form-elements的名称。

答案 3 :(得分:1)

我认为问题是move()函数的范围。尝试在调用之外定义move

function invoke (but) {  
    if(but==0) {
        document.myform.action="Alloc_Insert.do";
        // I don't know if you meant to call move() here or not
    }
    else if (but==2) { document.myform.action="WL_Verif.do"; } 
    else if (but==3) { document.myform.action="Add_Query.do"; }

    document.myform.submit();  
}

function move(){  
    document.getElementById('tgt1').value = 
    document.getElementById('Allocation').value;  
    document.getElementById('Allocation').value="";  
    document.getElementById("Send").disabled=true;
}

此外,正确格式化代码会使其易读性。

注意:即使在onClick="invoke(0);move();"内定义了move,Firefox似乎也很乐意执行invoke。但是,Chrome无法执行move,因为它无法找到它。所以一定要在多个浏览器中测试你的脚本。