0

我有一个问题,这里提到IE8 html select 需要两次单击才能打开 dropdown。我通过将 jQuery 替换.html(...)appendTo. 有谁知道为什么会这样?

问题总结——

问题是当我们将 HTML selectusinginnerHTML/jQuery.html(...)插入到其他带有单击或双击侦听器的HTML 元素(div或)中时,单击选择需要两次单击才能在 IE8 中打开下拉列表。span我正在使用jQuery.html(…)方法,我用jQuery.appendTo(...)方法替换它并且效果很好。我仍然不知道为什么在我的情况下使用 innerHTML/jQuery.html() 会出现问题。

4

3 回答 3

3

这是因为 IE8 中的 Web 加速器。

在您的示例中,当双击 DIV 时,.html()替换了 innerHTML,但仍然选择了组合框。(如果使用.appendTo(),则选择文本,而不是组合框)。在 Web 加速器模式下,第一次单击组合框将作为焦点(IE8 错误?)。

因此,要修复此错误,您可以在双击后清除选择。

$(function() {

    $("#click").dblclick(function(e) {
        clearSelection();// clear selection
        var options = "<select id='combobox'>"
        for ( var i = 0; i < 50; i++) {
            options += '<option value="ActionScript">Value - ' + i + '</option>';
        }
        $(this).html(options + "</select>");
    });
});

function clearSelection() {
    if(document.selection && document.selection.empty) {
        document.selection.empty();
    } else if(window.getSelection) {
        var sel = window.getSelection();
        sel.removeAllRanges();
    }
}
于 2013-03-26T06:02:26.300 回答
0

.html()就像在 dom 中替换 html 一样工作。因此 using.html()将擦除您的DOM元素及其replacenew so newelement并且elements只要您不使用delegateor就可能没有分配给它的事件.on

.appendTo()作为添加子元素的工作,DOM因此其他DOM元素仍然具有之前分配的事件。但是,如果我没记错的话,您新加载的DOM元素仍然没有events分配给它们。

所以你可以使用.on();

于 2013-03-26T05:21:50.593 回答
0

appendTo 将添加到现有的 DOM 元素,但 .html 将替换 DOM 元素内的所有元素

于 2013-03-26T05:06:15.320 回答