下面是我在一个按钮上用于多个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/>
答案 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
,因为它无法找到它。所以一定要在多个浏览器中测试你的脚本。