2009-08-31 45 views
4

我在提交表单和Javascript确认时遇到问题。基本上,按下“提交”按钮时会调用以下Javascript。HTML表单和Javascript确认

function confirmation() { 
    var answer = confirm("Are you sure you wish to edit?") 
    if (answer) 
    { 
     window.location = "#editform2"; 
    } 
} 

然而,当我打的取消而不是确定,JavaScript的执行正确的,因为我看地址栏,并没有更新到#editform2。然而,表格仍然提交。它似乎刷新页面。下面是从表单的相关部分:

//Form is encoded in PHP 
<form method=\"post\"> 
//Form is in here 
<input type=\"submit\" value=\"Edit\" onclick=\"confirmation()\"> 

所以形式也不知道到哪里去,它只是刷新页面,该页面恰好是处理器为好。所以即使我点击取消,Javascript仍然处于同一页面,它仍在处理中。除了将处理移至不同的页面,我的解决方案是什么?

回答

6

它的工作原理是这样的,因为它是一个sumbit按钮,表单在任何情况下都被提交。分配ID的形式和改变输入类型:

<form method="post" id="formid"> 
<input type="button" value="Edit" onclick="confirmation()"> 

,并呼吁点击此功能:

function confirmation() { 
    var answer = confirm("Are you sure you wish to edit?") 
    if (answer) 
    { 
     document.getElementById("formid").submit(); 
    } 
} 
+0

如果方法返回false,表单将不会被提交... – Robban 2009-08-31 08:37:03

1

尝试:

return answer; 

在函数的结尾,并确保的onclick方法返回。像这样:

<input type="submit" value="Edit" onclick="return confirmation()"> 

这将使函数返回false并且不会发布表单。

4

不要使用提交按钮的onclick事件,使用的onsubmit事件您的表单:

document.forms[0].onsubmit = function() { 
    return confirm("Are you sure you wish to edit?"); 
} 

您可能需要为表单添加id属性以标识它。

在JavaScript代码上保留事件绑定;而不是HTML上的内联属性,使您的代码更加易于理解并且易于调试。

+0

+1,但是'document.forms [0]'不是一个很好的可维护性解决方案。给表单一个名字或id会更好。 – nickf 2009-08-31 08:16:51

+0

同意,谢谢,只是为了举例的目的,这就是为什么我建议添加一个ID ... – CMS 2009-08-31 08:19:37