2013-03-26 52 views
1

我有一个问题,这里提到IE8 html select needs two clicks to open dropdown。我通过用appendTo替换jQuery .html(...)来修复它。任何人都知道为什么发生?jQuery appendTo vs html()

总结问题的 -

的问题是,当我们插入使用innerHTML/jQuery.html(...)一个HTML select成具有连接到它的点击或双击监听其他一些HTML元素(divspan)点击选择reuqired两次点击打开IE8中的下拉菜单。我正在使用jQuery.html(…)方法,我用jQuery.appendTo(...)方法取代了它,它工作正常。我仍然不知道为什么使用innerHTML/jQuery.html()在我的情况下有问题。

+0

我在WinXP的IE8中测试了你的原始代码,并且它工作正常,双击div并单击选择下拉菜单。话虽如此,IE浏览器弹出一个上下文菜单按钮有时(实时搜索等),如果我双击文本,而不是空白的部分 - 这可能是你的问题? – James 2013-03-26 05:45:58

+0

不,我从IE选项中禁用了IE8的上下文菜单,但我仍然遇到同样的问题。 – 2013-03-26 06:53:11

+0

[IE8 html select可能重复需要两次点击才能打开下拉菜单](http://stackoverflow.com/questions/15571059/ie8-html-select-needs-two-clicks-to-open-dropdown) – 2013-04-02 05:59:28

回答

0

appendTo将添加到现有的DOM元素,但html的将取代DOM元素中的所有元素

+3

谢谢Captain Obvious – AlienWebguy 2013-03-26 05:06:53

+0

这不是为什么'appendTo'解决了这个问题。 – 2013-03-26 05:08:27

0

.html()就像是更换内部DOM HTML工作。因此,使用.html()将清除您的DOM元素和replace它与新的如此新的elementelements可能没有事件分配给它,只要你没有使用delegate.on

.appendTo()正在为DOM添加子项,所以其他DOM元素仍然具有之前分配的事件。但如果我没有错,你新加载的DOM元素仍然没有events分配给他们。

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

+0

我很抱歉,但这不是我使用'appendTo'解决的问题。请访问问题声明中提到的链接 – 2013-03-26 05:38:34

+0

@MoazzamKhan已经做了测试,但在第一次点击时选择框选项可见 – 2013-03-26 05:40:40

+0

在我的问题中,我没有将任何事件附加到'select',所以使用'.on(...)不需要。我在问题陈述中总结了这个问题。 – 2013-03-26 06:55:38

3

这是因为IE8中的网络加速器。

在您的示例中,双击DIV时,.html()将替换innerHTML,但组合框仍处于选中状态。 (如果使用.appendTo(),则选择文本,而不是组合框)。 在Web Accelerator模式下,第一次点击组合框将作为焦点(一个IE8的bug?)。

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

$(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(); 
    } 
} 
+0

你的意思是如果我禁用IE 8 Web Accelerator的工具,我的代码会工作吗? – 2013-03-26 06:49:13

+0

是的,你可以从Internet选项中禁用它。但记住你的用户不会这样做。 – andyf 2013-03-26 09:45:25

+0

是的,我已经试过了,但它不起作用 – 2013-03-27 10:39:25