2010-10-03 60 views
8

我正在使用jQuery,并希望用户可以在将数据输入到搜索字段以开始搜索之后按回车键。jQuery keyup和Safari中的“输入”

我用下面的代码:

 $('#textSearch').keyup(function (event) { 
      if (event.keyCode == '13') { 
       doSearch(); 
      } 
      return false; 
     }); 

它可以完美运行在Firefox和IE,但不是在所有的Safari。发生什么事是,当我在safari中输入时,表单正在提交,而这不是我想要的。

添加onsubmit =“return false;”到表单工作,但不是一个选项,因为表单标签是在asp.net页面的主页上,我需要在其他页面上提交表单。

有没有办法让这个功能在Safari中工作?

编辑: 我也尝试只显示警报而不是doSearch()函数。警报显示正常,但之后表单正在提交。

回答

4

浏览器可能会有所不同,以该事件触发提交。在这种情况下,Safari可能会在keydown事件上提交。
你可以观看提交事件不改变的标记并取消它:

$('#the-id-of-the-form').submit(function(e) { 
    e.preventDefault(); 
}); 

然后,您可以监听keyup事件和处理它,你现在正在做的事情。

+0

工作完美!谢谢! :) – Martin 2010-10-03 15:55:21

3

试试这个:

$('#textSearch').keyup(function (event) { 
     var key = event.keyCode || event.which; 

     if (key === 13) { 
      doSearch(); 
     } 
     return false; 
    }); 
+0

谢谢!我尝试过,但没有任何区别。我还用更多的细节更新了这个问题。 – Martin 2010-10-03 15:01:50

1

附加防止deault

$('#textSearch').keyup(function (event) { 
    if (event.keyCode == '13') { 
     event.preventDefault(); 
     doSearch(); 
    } 
    return false; 
}); 
+0

谢谢,但它仍然提交表格.. – Martin 2010-10-03 15:52:47

0

我使用“keydown”,因为“keyup”不适合我。我还需要这个输入以禁用我使用AJAX添加的输入字段,因此是“活的”。

您需要将“更改”处理程序绑定到该字段。此版本退出字段(“模糊”),然后触发字段上的更改,然后触发更改。如果没有模糊,更改会触发两次!

$('#textSearch').live('keydown', function(event) { 
    if(event.keyCode == 13) 
    { 
    $(event.target).blur(); 
    $(event.target).change(); 
    event.preventDefault(); 
    return false; 
    } 
} 
); 
0

我使用“keydown”,因为“keyup”不适合我。我还需要这个输入以禁用我使用AJAX添加的输入字段,因此是“活的”。

您需要将“更改”处理程序绑定到该字段。此版本退出字段(“模糊”),然后触发字段上的更改,然后触发更改。如果没有模糊,更改会触发两次!

$('#textSearch').live('keydown', function(event) { 
    if(event.keyCode == 13) 
    { 
    $(event.target).blur(); 
    $(event.target).change(); 
    event.preventDefault(); 
    return false; 
    } 
});