2013-03-26 77 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