2010-06-10 37 views
0

我试图取消表单提交时,在文本框中按下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; 
} 

有没有办法让表单在显示警报后不提交?还有任何想法为什么警报框导致这个问题?

感谢

UPDATE,这似乎并没有要对IE浏览器的问题,会影响Firefox和Chrome。

回答

1

对于​​事件,您将返回false,而不是submit事件。这样,表单提交将会保持不变。

可能会停止在​​处理程序中的事件,这可能是最优雅的解决方案 - 我不知道,也许有人提出了一个建议。同时,作为另一种选择,您可以在​​事件中设置一个“不提交表单”标志,然后您在表单的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; 

} 

我不是100%肯定OTOH它是否可以分配属性,DOM这样的元素(this.do_not_submit),但我敢肯定它是。

+0

干杯这个工程。我仍然不知道为什么警报框会在事件的行为上有所不同。 – Magpie 2010-06-10 13:00:54

+0

如果使用jQuery,他可以使用'$ .data()'来做到这一点。 – 2010-06-10 13:46:26

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; 
} 
+0

对不起,尝试了这一点,它没有奏效 – Magpie 2010-06-10 12:58:21