【问题标题】:jQuery keyup and 'enter' in SafariSafari 中的 jQuery 键盘输入和“输入”
【发布时间】:2011-04-20 11:54:49
【问题描述】:

我正在使用 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() 函数。警报显示正常,但之后表单正在提交。

【问题讨论】:

    标签: jquery safari onkeyup


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      试试这个:

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

      【讨论】:

      • 谢谢!我试过了,但没有任何区别。我还用更多细节更新了这个问题。
      【解决方案3】:

      添加阻止默认值

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2015-07-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-01
            相关资源
            最近更新 更多