Javascript 多个函数onClick()不工作

Javascript 多个函数onClick()不工作,javascript,Javascript,下面是我在一个按钮上用于多个java脚本的代码。但是当我禁用第二个时,只有一个可以工作。请让我知道:如何更改代码以使其正常工作 function invoke(but) { if(but==0) { function move(){ document.getElementById('tgt1').value = document.getElementById('Allocation').value;

下面是我在一个按钮上用于多个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/>  

请注意,“move”函数不是在“invoke”函数之外声明的

然后,

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

onclick="(function(){ invoke(0);move(); })();"
或附加事件处理程序

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

请注意,“move”函数不是在“invoke”函数之外声明的

然后,

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

onclick="(function(){ invoke(0);move(); })();"
或附加事件处理程序

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

您的函数以一种奇怪的方式声明。您在invoke内部定义了move,我认为您不希望这样。如果希望有两个函数,请将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中。

您的函数以一种奇怪的方式声明。您在invoke内部定义了move,我认为您不希望这样。如果希望有两个函数,请将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中。

将按钮的名称更改为submit以外的名称

要解释发生了什么:

当您将name属性submit分配给button或任何其他表单元素时,可以通过

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

document.myform.submit
现在调用document.myform.submit时会发生什么

我将编写稍微不同的代码,您将看到问题:

document.myform['submit']()
代码不访问内置方法,而是首先指向表单元素,然后尝试执行该方法。但是表单元素不是方法,它最终都会出错,脚本的其余部分(包括move调用)将不会执行


重置也是一样,您永远不应该使用表单元素的内置属性/方法的名称作为表单元素的名称

将按钮名称更改为submit以外的名称

要解释发生了什么:

当您将name属性submit分配给button或任何其他表单元素时,可以通过

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

document.myform.submit
现在调用document.myform.submit时会发生什么

我将编写稍微不同的代码,您将看到问题:

document.myform['submit']()
代码不访问内置方法,而是首先指向表单元素,然后尝试执行该方法。但是表单元素不是方法,它最终都会出错,脚本的其余部分(包括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;
}
此外,正确地格式化代码将对代码的易读性产生奇迹般的影响


注意:Firefox似乎很乐意执行onClick=invoke0;移动即使移动是在调用中定义的。然而,Chrome不会执行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;
}
此外,正确地格式化代码将对代码的易读性产生奇迹般的影响


注意:Firefox似乎很乐意执行onClick=invoke0;移动即使移动是在调用中定义的。然而,Chrome不会执行move,因为它找不到它。因此,一定要在多个浏览器中测试您的脚本。

嗨,伙计,谢谢您的回复,这里只有一个函数在工作,即调用,但移动不起作用。嗨,伙计,谢谢您的回复,这里只有一个功能正在工作,即调用但移动不起作用。将按钮的名称更改为submit以外的其他名称将按钮的名称更改为submit以外的其他名称。感谢所有的朋友给我一些解决方案。将按钮的名称更改为“提交”以外的其他名称将按钮的名称更改为“提交”以外的其他名称。谢谢你们所有的朋友给我一些解决方案。