2

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

4 回答 4

1

请注意,“move”函数未在“invoke”函数之外声明。

然后;

或者将它们包装在一个自调用函数中:

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

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

div.attachEventListener('click', function () { ... }); // DOM 3
div.attachEvent('click', function () { ... }); // IE
于 2012-08-27T08:56:32.990 回答
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 中。

于 2012-08-27T09:01:17.417 回答
1

将按钮的名称更改为“提交”以外的其他名称


解释发生了什么:

当您将名称属性“提交”分配给按钮(或任何其他表单元素)时,可以通过以下方式访问此元素

document.myform.submit

但是还有一个表单的内置方法:submit(),您也可以使用它来访问它

document.myform.submit

现在打电话时会发生什么 document.myform.submit()

我会写代码有点不同,你会看到麻烦:

document.myform['submit']()

代码不是访问内置方法,而是首先指向表单元素,然后尝试执行该方法。但是表单元素不是一种方法,它都以错误告终,脚本的其余部分(包括 move() 的调用)将不会被执行。

与“重置”相同,您永远不应该使用表单元素的内置属性/方法的名称作为表单元素的名称。

于 2012-08-27T09:03:15.560 回答
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;
}

此外,正确地格式化你的代码将会对它的易读性产生奇迹。

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

于 2012-08-27T09:04:08.977 回答