显示警报时取消表单提交

时间:2010-06-10 10:06:35

标签: javascript

当在文本框中按下回车键时尝试取消表单提交时,我遇到了一个奇怪的问题。

使用下面的代码,在关闭警报后按下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。

2 个答案:

答案 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;
}