我的应用程序中有一些自动完成功能。其中一些在加载时从数据库中填充。如果输入值包含像æøå这样的特殊字符,则自动完成会触发搜索,即使用户没有在html输入附近。这仅适用于Internet Explorer 11(可能更低)。在FF和Chrome中它可以正常运行。
考虑以下输入:
<input type='text' class'ac' value='chars æøå' />
如果对此输入应用自动完成,其中一个可能的搜索结果与默认值('charsæøå')相同,则搜索将在初始化时触发。
JSfiddle here(使用IE查看它在加载时触发):http://jsfiddle.net/BY9gU/
我很乐意忽略IE,但不幸的是我的一些客户仍在使用它......
有关解决方法的任何想法吗?
答案 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的问题。他们没有答案,也不确定他们是否能够对这个问题采取一些措施。答案 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%肯定我还没有:)