我有一个调查网站,在用户填写问卷时,似乎存在按下回车键(原因未知)并且在没有点击提交按钮的情况下,意外提交了问卷表单的问题。是否有方法可以防止这种情况发生?
我在调查中使用HTML、PHP 5.2.9和jQuery。
我有一个调查网站,在用户填写问卷时,似乎存在按下回车键(原因未知)并且在没有点击提交按钮的情况下,意外提交了问卷表单的问题。是否有方法可以防止这种情况发生?
我在调查中使用HTML、PHP 5.2.9和jQuery。
<div x-data>
<form x-on:keydown.prevent.enter="">...</form>
</div>
或者,您可以使用.window
修饰符在页面的根window
对象上注册事件侦听器,而不是在元素上注册。
<form>
<div x-data>
<input x-on:keydown.window.prevent.enter="" type="text">
</div>
</form>
只禁止提交而不影响其他重要的回车键功能,例如在 <textarea>
中创建新段落:
window.addEventListener('keydown', function(event) {
//set default value for variable that will hold the status of keypress
pressedEnter = false;
//if user pressed enter, set the variable to true
if (event.keyCode == 13)
pressedEnter = true;
//we want forms to disable submit for a tenth of a second only
setTimeout(function() {
pressedEnter = false;
}, 100)
})
//find all forms
var forms = document.getElementsByTagName('form')
//loop through forms
for (i = 0; i < forms.length; i++) {
//listen to submit event
forms[i].addEventListener('submit', function(e) {
//if user just pressed enter, stop the submit event
if (pressedEnter == true) {
updateLog('Form prevented from submit.')
e.preventDefault();
return false;
}
updateLog('Form submitted.')
})
}
var log = document.getElementById('log')
updateLog = function(msg) {
log.innerText = msg
}
input,
textarea {
display: inline-block;
margin-bottom: 1em;
border: 1px solid #6f6f6f;
padding: 5px;
border-radius: 2px;
width: 90%;
font-size: 14px;
}
input[type=submit] {
background: lightblue;
color: #fff;
}
<form>
<p>Sample textarea (try enter key):</p>
<textarea rows="4">Hit enter, a new line will be added. But the form won't submit</textarea><br/>
<p>Sample textfield (try enter key):</p>
<input type="text" placeholder="" />
<br/>
<input type="submit" value="Save" />
<h3 id="log"></h3>
</form>
function(event)
而不是function(e)
。除此之外,对我来说它可以工作。谢谢。 - Guillermo PrandisetTimeout(function() { pressedEnter = false; }, 100)
不在 event.keyCode == 13
的条件语句内? - user151496on("keydown", function(event) { enterPressed = true; }
然后在提交事件中执行以下操作:
on("submit", function(e) { if (pressedEnter == true) { pressedEnter = false; e.preventDefault(); return false;}
这将确保它可以在任何延迟下工作。 - Curtis Snowden<form @submit.prevent>...</form>
<input ... @keypress.enter.prevent />
也可以使用(Y) - undefined$(document).on("keydown","form", function(event)
{
node = event.target.nodeName.toLowerCase();
type = $(event.target).prop('type').toLowerCase();
if(node!='textarea' && type!='submit' && (event.keyCode == 13 || event.keyCode == 169))
{
event.preventDefault();
return false;
}
});
它完美地工作了!
我觉得已经有了很好的回答,但如果您正在使用带有一些JavaScript验证代码的按钮,则可以将表单的 onkeypress 设置为按预期调用您的提交:
<form method="POST" action="..." onkeypress="if(event.keyCode == 13) mySubmitFunction(this); return false;">
onkeypress JS可以是您需要执行的任何操作。如果不是从头开始编写应用程序,并且已被引入修复其他人的网站而不必拆开并重新测试它,则没有必要进行更大的全局更改。
我曾遇到类似问题,我的网格有“ajax文本字段”(Yii CGridView),只有一个提交按钮。每次我在文本框上进行搜索并按回车键时,表单就会被提交。因为它是视图之间唯一的共同按钮(MVC模式),所以我不得不对按钮进行修改。我所做的只是删除type="submit"
并添加onclick="document.forms[0].submit()
这里有一个我没有看到答案的问题:当您在页面上通过元素进行制表时,当您到达提交按钮并按下Enter时,将触发表单上的onsubmit处理程序,但它将记录事件为MouseEvent。 这是我的简短解决方案,以涵盖大多数情况:
这不是与jQuery相关的答案
<form onsubmit="return false;" method=post>
<input type="text" /><br />
<input type="button" onclick="this.form.submit()" value="submit via mouse or keyboard" />
<input type="button" onclick="submitMouseOnly(event)" value="submit via mouse only" />
</form>
window.submitMouseOnly=function(evt){
let allow=(evt instanceof MouseEvent) && evt.x>0 && evt.y>0 && evt.screenX > 0 && evt.screenY > 0;
if(allow)(evt.tagName=='FORM'?evt.target:evt.target.form).submit();
}
要找到一个可行的例子:https://jsfiddle.net/nemesarial/6rhogva2/
<script>
window.addEventListener('keydown', function(e) {
if (e.keyIdentifier == 'U+000A' || e.keyIdentifier == 'Enter' || e.keyCode == 13) {
e.preventDefault();
return false;
}
}, true);
</script>
<script>
window.addEventListener('keydown', function(e) {
if (e.keyIdentifier == 'U+000A' || e.keyIdentifier == 'Enter' || e.keyCode == 13) {
if (e.target.nodeName == 'INPUT' && e.target.type == 'text') {
e.preventDefault();
return false;
}
}
}, true);
</script>
// disable form submit with enter
$('form input:not([type="submit"])').keydown((e) => {
if (e.keyCode === 13) {
e.preventDefault();
return false;
}
return true;
});
activate
和deactivate
。 input:disabled {
background: gainsboro;
}
input[value]:disabled {
color: whitesmoke;
}