2009-11-26 58 views
0

我有一个函数(filterLeads),我希望在表单字段从(模糊)移开时以及在表单域内按下回车键时调用这两个函数。jQuery按键事件问题

$('#filter input, #filter select').blur(filterLeads); 
$('#filter input, #filter select').keypress(function(e){if(e.which == 13) {filterLeads();}}); 

模糊效果正常,但我遇到按键事件问题。除非在调用filterLeads()之前发生事件,否则事件似乎不会被触发。例如:

$('#filter input, #filter select').keypress(function(e){if(e.which == 13) {alert(e.which);filterLeads();}}); 

在确认警报(显示正确的密钥代码)后,正确调用filterLeads()。

任何想法? (Browser FF 3.0)

+2

的'alert'窗口弹出的原因'blur'火,这或许可以解释为什么这使得这项工作。 – bobince 2009-11-26 11:52:25

+1

filterLeads是否期望事件作为参数? – Boldewyn 2009-11-26 11:56:51

+0

请向我们展示'filterLeads()'函数。 – 2009-11-26 12:00:25

回答

1

试试看:您应该从匿名函数中获得return false;,因为否则包含字段的表单(如果有的话)会被提交并重新载入页面。

如果filterLeads预计事件为参数,请不要忘记写入:filterLeads(e)

如果没有别的帮助:火blur()

$('#filter input, #filter select').keypress(function(e){$(e.target).blur();}); 

(jQuery的田间,因为有可能是定制的jQuery事件附后)。

+0

这似乎并不奏效。当输入被按下时,页面没有被重新加载,所以我不认为表单动作被触发(没有提交按钮)。 – Tom 2009-11-26 11:50:48

+0

尝试将你的动作放在keyup事件上。任何变化? – Boldewyn 2009-11-26 11:55:15

0

只需添加e.preventDefault();您的事件处理中,像这样:

$('#filter input, #filter select').keypress(function(e){if(e.which == 13) {filterLeads(); e.preventDefault(); }}); 
+0

这与返回false基本相同,如果没有其他事件处理程序注册。 – Boldewyn 2009-11-26 11:51:33

+0

不幸的是,这也不起作用。 – Tom 2009-11-26 11:54:36

+0

我的意思是preventDefault(),而不是stopPropagation(),对不起... – krcko 2009-11-26 12:25:45

2

我不知道为什么你只针对FF ......但你也应该用e.keyCode包括all non-FF browsers。另外keypress根据this information可能不是最好的事件。

尝试是这样的:

$("#filter input, #filter select").keyup(function(e){ 
var key = (e.which) ? e.which : e.keyCode; 
if(key == 13){ filterLeads(e) } 
}); 
+0

该代码实际上是用于我为公司工作的内部Web应用程序,我们可以保证使用Firefox来访问它。话虽如此,我非常热衷于编写跨浏览器代码,该信息非常有用 - 谢谢:) – Tom 2009-11-26 15:15:58

+0

谢谢你解决了我的问题:) – 2011-07-29 07:43:09