2012-07-05 105 views
0

我有这样的代码 http://jsfiddle.net/2Gay9/3/为什么浏览器触发点击事件而不是提交表单?

HTML

<form action="/" method="get" onsubmit="return false";> 
    test: <input type="text" value=""> 
    <input type="submit" value="submit"> 
</form> 

JS

jQuery('input').bind("keydown click", function(event){ 
    console.log(event.type); 
    console.log(jQuery(this)); 
}); 

尝试在输入文本回车,看看控制台:

keydown 
jQuery(input) 
click 
jQuery(input submit) 

问题:为什么浏览器在提交按钮上触发'click'事件,而不是触发表单中的'submit'事件?这是项目缺陷还是规范?我怎样才能取消第二个事件没有取消表单提交?

韩国社交协会

UPDATE 换句话说,我只需要从浏览器事件diferenciate我的事件。

+0

可能重复:http://stackoverflow.com/questions/4763638/enter-triggers-button-click – 2012-07-05 22:02:21

回答

0

解决了!

如果我无法停止提交按钮上的点击事件,我可以workarround只有diferenciating浏览器从用户点击。若要diferenciate browsers clickusers click我将使用mousedown事件而不是点击事件。

每当我们在输入文本中点击RETURN时,浏览器触发器会以当前的形式单击第一个提交按钮。但是这并不会触发这种事件,在这种情况下是“人类专用”。

固定版本,打印一次事件。

jQuery('input').bind("keydown mousedown", function(event){ 
    console.log(event.type); 
    console.log(jQuery(this)); 
}); 

http://jsfiddle.net/2Gay9/6/

0

使用:

jQuery('input').bind("keydown click", function(event){ 
    event.preventDefault(); 
    console.log(event.type); 
    console.log(jQuery(this)); 
}); 
+0

我不想做站表单提交,因为我有很多JS的依赖在这。我只想从浏览器事件中分辨我的事件。 – Topera 2012-07-05 22:18:55

+0

你的意思是自定义事件/事件代表团? – Alex 2012-07-05 22:27:45

+0

不,我只想知道用户是否点击了提交按钮,或者点击是否被浏览器触发。 – Topera 2012-07-05 22:32:39

相关问题