【问题标题】:Jquery UI autocomplete - Unwanted triggering due to special charactersJquery UI 自动完成 - 由于特殊字符导致不需要的触发
【发布时间】:2014-03-26 15:20:15
【问题描述】:

我的应用程序中有一些自动完成功能。其中一些在加载时从数据库中填充。如果输入值包含像æøå 这样的特殊字符,即使我的用户没有靠近 html 输入,自动完成也会触发搜索。这仅适用于 Internet Explorer 11(可能更低)。在 FF 和 Chrome 中,它可以正常工作。

考虑以下输入:

<input type='text' class'ac' value='chars æøå' />

如果在其中一个可能的搜索结果与默认值('chars æøå')相同的情况下对此输入应用自动完成,则搜索将在初始化时触发。

JSfiddle 在这里(使用 IE 查看它在加载时触发):http://jsfiddle.net/BY9gU/

我很想忽略 IE,但不幸的是我的一些客户仍在使用它...

有什么解决方法的想法吗?

【问题讨论】:

    标签: jquery internet-explorer autocomplete


    【解决方案1】:

    前段时间我遇到了这个问题,最后我在我的 html 中做了以下操作:

    <input type='text' class'ac' data-value='chars æøå' />
    

    在我的自动完成初始化中,我有:

       $("input").autocomplete({
            source: availableTags, 
            create: function(event, ui) {
                $(this).val(($(this).attr("data-value"))); 
            }
        });
    

    看起来只有当值属性包含特殊字符时才会发生这种情况。

    【讨论】:

    • 聪明!使用您的解决方案,也不必更改 jquery ui 源代码:)
    【解决方案2】:

    尝试在文档头部添加这段代码:

    <meta http-equiv='X-UA-Compatible' content='IE=Edge'>
    

    【讨论】:

      【解决方案3】:

      我有同样的问题,但还没有找到解决办法(目前)。

      根据 jQueryUI 错误论坛,这是一个与 IE 相关而不是 jQuery 的问题。他们没有答案,也不确定他们能否解决这个问题。

      http://bugs.jqueryui.com/ticket/9796#no1

      【讨论】:

      • 实际上,我在 jQuery 源代码中做了一个小修改,解决了这个问题 :) 请参阅我的单独答案。
      【解决方案4】:

      正如@cverb 在他的回答中所说,这是一个 IE 问题,不能归咎于 jQuery UI。但是,至少在我的项目中,我制定了一个似乎可以正常工作的解决方法:

      在 jquery ui 源代码中找到此代码:

      search: function( value, event ) {
          value = value != null ? value : this._value();
      
          // always save the actual value, not the one passed as an argument
          this.term = this._value();
      
          if ( value.length < this.options.minLength ) {
              return this.close( event );
          }
      

      把它改成这个(添加 if 块):

      search: function( value, event ) {
          value = value != null ? value : this._value();
      
          // The following if-block is inserted by me as a workaround.
          // Add all characters which may cause you trouble in the
          // regex pattern.
          if ( this._value().match(/[æøåÆØÅ]/) && this.term === undefined ) {
              return;
          }
      
          // always save the actual value, not the one passed as an argument
          this.term = this._value();
      
          if ( value.length < this.options.minLength ) {
              return this.close( event );
          }
      

      瞧!有用。我不能保证我没有破坏其他一些功能,但我有 99.9% 的把握我没有:)

      【讨论】:

        猜你喜欢
        • 2014-08-23
        • 1970-01-01
        • 2017-02-08
        • 2011-06-11
        • 1970-01-01
        • 2018-01-16
        • 1970-01-01
        • 1970-01-01
        • 2014-02-08
        相关资源
        最近更新 更多