jQueryUI自动完成与IE 11有线行为

jQuery UI autocomplete with IE 11 - wired behavior

本文关键字:IE jQueryUI      更新时间:2023-09-26

我想设置自动完成字段。所以我写了

$(document).ready(function() {
    $("#mytext").autocomplete({
         source: function(request, response) {
            $.getJSON("/ajax/autocomplete.php?term=" + $.trim(request.term), function(data) {
                response($.map(data, function(item) {
                    return {label: highlightResult(item.label, $.trim(request.term))};
                }));
            });
        },
        minLength: 0
    }).each(function() {
        $(this).data("ui-autocomplete")._renderItem = function(ul, item) {
            return $("<li></li>")
                    .data("item.autocomplete", item)
                    .append("<a>" + item.label + "</a>")
                    .appendTo(ul);
        };
    });
    ...
    $("#mytext").focusin(function() {
        $(this).autocomplete("search", $(this).val());
    });
});

使用HTML:

<div style="visibility: hidden;"/>
    <input type="text" id="mytext" />
</div>
<button onclick="showDiv();">Click To Show</button>

这段代码在谷歌浏览器上运行良好。但它在IE 11上运行起来很奇怪。

默认情况下,输入是隐藏的,但在单击按钮时会显示。

怪异行为:
1) 刷新时,自动完成菜单将出现在窗口(正文)的左上角
2) 当文本框中有文本时,菜单不显示。我看到data参数有时(当有文本时)是未定义的-wierd。。。

我该怎么处理这些问题?我没有找到任何有用的解决方案。

我也有同样的问题。页面刷新后会显示一些自动完成功能。不知道为什么会发生这种情况,因为我在表单中有很多控件,而bug只在很少的控件中发生
另一种修复方法,正如Marc Thomann所说的那样-禁用自动完成并(我的技巧)添加

$(document).ready(function() {
...
/**** that is last line ***//
if (msieversion() === 11) {setTimeout(enable_autocomplete, 200);} 

//函数enable_autocomplete()包含$(".my_selector").autocomplete("option"、"disabled"、false);});

所以我的代码是:

var autocomplete_options = {/** your usual options **/};
if (msieversion() === 11) {
 autocomplete_options.disabled = true;
};
$("#mytext").autocomplete(autocomplete_options);

另一种可能性是使用选项创建自动完成

disabled: true

并且在需要时启用它

当元素的可见性设置为隐藏时,IE不会为其处理事件,因此当DOM准备好时,它会尝试将事件附加到无法接收事件的东西上,从而导致未定义的行为。不要使用$(document).ready(),而是在showDiv函数

中使用自动完成调用