在keypress上,JQuery UI点击事件触发两次

HTML

 

JS

 $('#clickMe').button(); $('#clickMe').click(function() { alert('hey'); }); $(document).keypress(function (e) { var key = e.keyCode ? e.keyCode : e.which; //detect when the user has hit enter if (key == 13) { //click the focused element $(document.activeElement).click(); } }); 

当你按Tab键聚焦按钮并输入按键事件时,为什么这会发出两次警报,但只有当你用鼠标点击按钮时才会触发一次?

示范

编辑选项卡 + 输入在IE 10中根本不起作用

因为焦点在按钮上时按“Enter”会触发“单击”事件本机。 您还会收到“按键”事件,然后再次触发“点击”事件。

由于缺乏空间,我在这里回应Pointy的评论,而不是评论。

我可以确认我可以看到在JSbin中触发了点击,但我不知道如何解释我的实际应用程序代码的行为与页面上的行为之间的差异。 也许是因为我将“点击”绑定在一条单独的行而不是链接它。

我还没有学会如何使用JSBin,但我郑重承诺尽快这样做。 但是,我的信息来自我自己的代码中的实验:

 $(settings.selectors.patientSearchSubmitButton).click(validatePatientSearch); 

接下来是

 $(settings.selectors.patientSearchSubmitButton).click(alertOnClick); 

我还有另一个约束:

  $(settings.selectors.patientSearchParameter).keypress(function (e) { if (e.which == 13) {//Enter key pressed validatePatientSearch(); } }); 

patientSearchParameter是按钮旁边的字段。 当我专注于该字段并在chrome,ff,plain IE11中点击“enter”时,validatePatientSearch函数运行一次,并且alertOnClick函数未运行。 当我在IE11的IE11兼容模式中做同样的事情,9,10; 该函数运行了两次,并触发了alertOnClick。 我不确定如何certificate这一点,但这是我的经验,这是20多次测试尝试的重复行为。 我使用的是Windows 7 64位。 不知道还有什么可能导致它以这种方式表现,但我希望它对某人有用。

可能是因为我的点击是绑定按钮而不是字段?