Jquery UI自动完成 - 由于特殊字符而导致的不需要的触发

时间:2014-03-22 21:47:03

标签: jquery internet-explorer autocomplete

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

考虑以下输入:

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

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

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

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

有关解决方法的任何想法吗?

4 个答案:

答案 0 :(得分:2)

我前一段时间遇到过这个问题,最后我在html中执行了以下操作:

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

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

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

如果value-attribute包含sspecial characters,则只会发生这种情况。

答案 1 :(得分:0)

尝试在文档的头部添加此代码:

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

答案 2 :(得分:0)

我遇到了同样的问题,但尚未找到修复程序。

根据jQueryUI错误论坛,这是一个与IE相关而不是jQuery的问题。他们没有答案,也不确定他们是否能够对这个问题采取一些措施。

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

答案 3 :(得分:0)

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

在jquery ui source中找到此代码:

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-block):

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%肯定我还没有:)