不久前,我发现了一个函数(在这里),它将允许我在表单提交时启动一个Javascript提示框,它将接受一个值,然后在提交的表单旁边提交它。
我一直在绞尽脑汁想为什么这不能正常工作。现在,如果我在表格的第一行以外的行上单击submit,它会在第一行上提交表单。
函数使用文档。getElementById来查找输入文本的位置,但因为它是while循环,所以document.getElementById("invoiceEntry")。值=答案;存在于表的每一行,并将文本注入到第一个实例中。
有简单的解决方法吗?
下面是我的代码片段:
<script language="Javascript">
function invoiceCollect() {
var answer = prompt("Enter invoice number:");
if(answer) { // answer = false if "cancel" pressed.
document.getElementById("invoiceEntry").value = answer;
return true;
}
else if(answer == "") { // return false if no input entered, i.e. ""
return false;
}
else
return false;
}
</script>
<form id='invoice' method='post' action='update_item.php' onsubmit='return invoiceCollect()'>
<input type='hidden' name='invoiced' >
<input type='hidden' name='id' value='" . $row['id'] . "' >
<input type='hidden' name='invoiceNo' id='invoiceEntry' value='' >
</form>
<input type='submit' value='Invoice' form='invoice'>
我将假设你正在谈论的while循环是服务器端,在PHP和它包装你发布的HTML。如果不是这样,请评论,我将删除答案,因为它会跑题。
问题1:你的函数不应该在循环中定义。你希望所有的函数都做同样的事情,也许是对不同的元素。只需要一个函数,把元素作为参数就可以了。
问题2:识别正确的元素。这是你面临的实际问题。所有函数都使用具有该ID的第一个元素,因为这就是HTML的定义方式,它希望ID是唯一的。最简单的解决方案是将表单作为参数添加到函数中:
JavaScript:function invoiceCollect(form) {
form.invoiceNo.value = 'WORKS';
}
HTML: <form onsubmit = 'return invoiceCollect(this)'>
演示<input type='submit' value='Invoice' form='invoice'>
前面的</form>
所以应该是这样的:
<script language="Javascript">
function invoiceCollect() {
var answer = prompt("Enter invoice number:");
if(answer) { // answer = false if "cancel" pressed.
document.getElementById("invoiceEntry").value = answer;
return true;
}
else if(answer == "") { // return false if no input entered, i.e. ""
return false;
}
else
return false;
}
</script>
<form id='invoice' method='post' action='update_item.php' onsubmit='return invoiceCollect()'>
<input type='hidden' name='invoiced' >
<input type='hidden' name='id' value='" . $row['id'] . "' >
<input type='hidden' name='invoiceNo' id='invoiceEntry' value='' >
<input type='submit' value='Invoice' form='invoice'>
</form>