2011-10-10 35 views
3

我面临或多或少同样的问题描述here(即我有被点击编程时,一个标签后获得焦点提交输入项目,但重点处理程序也被调用时用户点击按钮,导致双重提交)。链接帖子中建议的解决方案工作,但我需要一个不需要jQuery的解决方案。有没有人对此有过一些想法?请注意,我需要按钮的点击行为保持不变,因为它绑定到一个asp.net服务器端事件。谢谢!防止专注于普通的JavaScript按钮点击

回答

2

你要防止从形式提交,以便添加事件侦听器,然后你想怎么JavaScript来处理提交表单代码。还要问你如何在不依赖任何框架的情况下如何胜任代码编写的问题! :-)

一些粗糙的代码给你如何防止提交表单的想法...

if (window.addEventListener) 
{ 
forms[i].addEventListener('submit',function(e) {e.preventDefault(); eval(id_forms[e.target.id]+'();');},false); 
} 
else if (window.attachEvent) 
{ 
forms[i].attachEvent('onsubmit',function(e,f) {e.returnValue=false; eval(id_forms[e.srcElement.id]+'();');}); 
} 
+0

感谢您的回答。该解决方案看起来不错(可能减去使用eval :))。我已经实施了另一种方法,我忘了在这里写下来,所以我会这样做,但要给你答案。 –

+0

我使用eval谨慎,这段代码实际上是我如何防止从形式提交我的网站上这样我就可以了JavaScript处理他们,而不是一部分。我仍然处理JavaScript禁用时提交的表单,并在启用JavaScript时通过追加?ajax = 1来确定差异。 – John

2

我结束了与具有使用keyUp和的keyDown处理程序中,我设置/取消一个isKeyPressed变量。这是我的理解是,按Tab键,当这种情况发生的事件的顺序如下:

  • 的keyDown
  • 重点虎子
  • 使用keyUp

因此,在焦点事件处理程序我检查重点是通过制表(即如果isKeyPressed设置为true)并在那里提交表单。否则,如果在click()后获得焦点,isKeyPressed将不会被设置为true,并且我不会以编程方式触发表单提交。

+0

事件是基于DOM,而不是从JavaScript中,可以在这里找到所有地方的好名单:http://en.wikipedia.org/wiki/DOM_events – John