我在一个网站上进行了一项调查,用户点击输入(我不知道为什么)并在不点击提交按钮的情况下意外提交调查(表格)似乎存在一些问题.有办法防止这种情况吗?
我在调查中使用HTML,PHP 5.2.9和jQuery.
为什么这个带有一个文本字段的简单模态对话框(和NO按钮)在焦点位于字段上并且按下Enter时忽略?
<a href="#dlgAddDeviceFolder" class="add-device-folder" data-toggle="modal">New Folder</a>
<div id="dlgAddDeviceFolder" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="dlgAddFolderLabel" aria-hidden="true">
<div class="modal-header">
<!--<a type="button" class="close" data-dismiss="modal" aria-hidden="true">×</a>-->
<h3 id="myModalLabel">Add Device Folder</h3>
</div>
<div class="modal-body">
<form class="form-horizontal">
<div class="control-group">
<label class="control-label" for="dlgAddDeviceFolder_name">Folder Name</label>
<div class="controls">
<input id="dlgAddDeviceFolder_name" type="text" placeholder="Folder Name" autocomplete="off">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<!--<a type="button" class="btn" data-dismiss="modal" aria-hidden="true">Cancel</a>-->
<!--<a id="dlgAddDeviceFolder_btnOk" type="button" class="btn btn-primary">OK</a>-->
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这里有广泛的讨论,它表明它是一个按钮问题(我在按钮和锚标签上放了type ="button".我已经将按钮标签转换为锚点).但是,我尝试了所有提出的解决方案,最后只是完全注释掉按钮,它仍然会发生.
请注意,如果您只是复制相同的文本输入并有两个字段,则问题就会消失(关注任一文本字段都不会导致Enter解除)
在上一个问题中,我问了同样的问题,但是当用户在文本框中时,我没有阻止提交的答案.
所以基本上我需要的是能够阻止一个人提交表单,除非明确点击提交按钮.
编辑:
基本上这样做的主要原因是这是雇主调查.在这方面的人不会是技术上最精明的,我正在为此做的客户要求这样做.
我有一个与此类似的jQuery/HTML代码:
<form action="/SomeAction" method="post">
<input id="my-textbox" type="text" placeholder="Write something and press enter to continue..." />
</form>
<script type="text/javascript">
$(function() {
$('#my-textbox').keyup(function(e) {
var $textbox = $(this);
if ($textbox.val().length > 0 && e.keyCode == 13) {
$textbox.parent('form').submit();
}
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
目的是在用户按下"Enter"键时自动提交表单.我经常使用Firefox,所以在我使用谷歌浏览器和Internet Explorer进行测试之前,一切都还可以.
当我在后面的浏览器中按下Enter键时,有时我会提交两次表单.这很容易被注意到,因为我会在我的数据库中获得重复的条目,并且我会看到两个POST使用Fiddler.
经过一些测试,我发现我的问题是jQuery代码,因为文本框会在没有它的情况下自动提交,并且POST在某些浏览器中使用此代码会产生第二个代码.
我的问题是:
为什么浏览器不能巧妙地阻止第二个表单发布(就像Firefox在我的测试中所做的那样)?
我是否应该在所有平台的所有主流浏览器中都期待此行为?
有没有办法改进这个代码所以我使用JavaScript执行提交,但是没有提交两次提交的表单?
javascript forms jquery javascript-events double-submit-problem