8

我正在使用 jQuery,并希望用户在将数据输入搜索字段后可以按 Enter 键开始搜索。

我正在使用以下代码:

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

它在 Firefox 和 IE 中完美运行,但在 Safari 中则完全不行。发生的情况是,当我在 safari 中按 Enter 时正在提交表单,这不是我想要的。

添加 onsubmit="return false;" 表单有效,但不是一个选项,因为表单标签位于 asp.net 页面的母版页上,我需要在其他页面上提交表单。

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

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

4

5 回答 5

4

浏览器可能会因哪个事​​件触发提交而有所不同。在这种情况下,Safari 可能会提交 keydown 事件。
您可以在不更改标记的情况下观察提交事件并将其取消:

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

然后,您可以侦听 keyup 事件并像现在一样处理它。

于 2010-10-03T15:35:28.550 回答
3

试试这个:

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

        if (key === 13) {
            doSearch();
        }
        return false;
    });
于 2010-10-03T14:53:25.810 回答
1

添加阻止默认值

$('#textSearch').keyup(function (event) {
    if (event.keyCode == '13') {
        event.preventDefault();
        doSearch();
    }
    return false;
});
于 2010-10-03T15:25:58.213 回答
0

我使用“keydown”,因为“keyup”对我不起作用。我还需要使用我使用 AJAX 添加的输入字段禁用此输入,因此是“实时”。

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

 $('#textSearch').live('keydown', function(event) {
  if(event.keyCode == 13)
  {
  $(event.target).blur();
  $(event.target).change();
  event.preventDefault();
  return false;
  }
 }
);
于 2010-10-11T07:58:07.293 回答
0

我使用“keydown”,因为“keyup”对我不起作用。我还需要使用我使用 AJAX 添加的输入字段禁用此输入,因此是“实时”。

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

    $('#textSearch').live('keydown', function(event) {
  if(event.keyCode == 13)
  {
  $(event.target).blur();
  $(event.target).change();
  event.preventDefault();
  return false;
  }
 });
于 2010-10-11T08:21:26.800 回答