当在文本框中按下回车键时尝试取消表单提交时,我遇到了一个奇怪的问题。
使用下面的代码,在关闭警报后按下enter时总是提交。如果我注释掉表单上不再提交的警告,则表示所需的结果。
<input id="myTextBox" type="text" onkeydown="return myFunction(event);">
function SearchOnEnter(event) {
var key = event.charCode || event.keyCode || e.which || 0;
if (key == 13) {
alert('Test text.');
return false;
}
else
return true;
}
有没有办法在显示提醒后让表单不提交?还有任何想法为什么警报框导致这个问题?
由于
更新,这似乎不是IE的问题,影响Firefox和Chrome。
答案 0 :(得分:1)
您正在为false
事件返回keydown
,而不是submit
事件。这样,表单提交将继续保持不变。
有可能在keydown
处理程序中停止可能是最优雅解决方案的事件 - 我不知道,也许有人想出了这个建议。
与此同时,作为另一种选择,您可以在keydown
事件中设置“不提交表单”标记,然后在表单的submit
事件中进行检查。
未经测试,但应该按照以下几点工作:
// in the `keydown` function
if (key == 13) {
alert('Test text.');
this.form.do_not_submit = true;
......
<form onsubmit="submit()"...>
....
function submit()
{
if (this.do_not_submit == true)
return false;
}
我不是百分之百确定OTOH是否可以将属性分配给DOM元素(this.do_not_submit
),但我很确定它是。
答案 1 :(得分:0)
试试这个:
if (key == 13) {
alert('Test text.');
// if preventDefault exists run it
if (event.preventDefault) {
event.preventDefault();
}
// otherwise set the returnValue property of the event to false (IE)
event.returnValue = false;
return false;
}