2013-03-26 3 views
1

У меня была проблема, упомянутая здесь IE8 html select needs two clicks to open dropdown. Я установил его, заменив jQuery .html(...) на appendTo. Кто-нибудь знает, почему это произошло?jQuery appendTo vs html()

Краткое описание проблемы -

Вопрос был, когда мы вставить HTML select с помощью innerHTML/jQuery.html(...) в какой-либо другой HTML элемент (div или span), который имеет щелчок или двойной щелчок слушателя, прикрепленную к нему, Нажав на ссылку, выберите два раза, чтобы открыть раскрывающийся список в IE8. Я использовал метод jQuery.html(…), который я заменил на метод jQuery.appendTo(...), и он отлично работал. Я до сих пор не знаю, почему возникает проблема с использованием innerHTML/jQuery.html() в моем случае.

+0

Я проверил ваш исходный код из исходного вопроса в своем IE8 на WinXP, и он отлично работает, дважды щелкните мышью на div и выберите один из них, чтобы выпадал. Сказав это, IE иногда вызывает контекстное меню (live search и т. Д. И т. Д.), Если я дважды нажимаю TEXT, а не пустую часть div - это может быть вашей проблемой? – James

+0

Нет, я отключил это контекстное меню IE8 из параметров IE, но у меня была такая же проблема. –

+0

Возможный дубликат [IE8 html select требует двух щелчков, чтобы открыть раскрывающийся список] (http://stackoverflow.com/questions/15571059/ie8-html-select-needs-two-clicks-to-open-dropdown) –

ответ

0

appendTo добавит к существующим DOM элемент, но .html заменит все элементы внутри элемента DOM

+3

Спасибо капитану Очевидному – AlienWebguy

+0

Это не причина, почему 'appendTo' решила проблему. –

0

.html() работа как заменить HTML в DOM. Таким образом, используя .html() удалит вас DOM и replace его новым новым element и что elements может не иметь назначенного ему события, если вы не использовали delegate или .on.

.appendTo() Работает как добавление ребенка к DOM, так что другой элемент DOM все еще имеет событие, назначенное ранее. Но если я не ошибаюсь, ваш новый загруженный элемент DOM по-прежнему не имеет назначенных им events.

Таким образом, вы можете использовать .on();

+0

Прошу прощения, но это не проблема, которую я решил использовать с помощью 'appendTo'. Пожалуйста, перейдите по ссылке, упомянутой в заявлении о проблемах –

+0

@MoazzamKhan уже выполнил и протестировал, но опция selectbox видима при первом нажатии –

+0

В моей проблеме я не прикрепляю какое-либо событие к 'select', поэтому используйте' .on (...) ' не требуется. Я обобщил проблему в описании проблемы. –

3

Это из-за веб-ускорителя в IE8.

В вашем примере при двойном щелчке по DIV, .html() заменяет innerHTML, но combobox все еще выбран. (Если используется .appendTo(), текст выбран, а не выпадающий список). В режиме Web Accelerator первый щелчок на combobox будет работать как фокус (ошибка 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(); 
    } 
} 
+0

Вы имеете в виду, если я отключу IE 8 Web Accelerator от инструментов, мой код будет работать? –

+0

Да, вы можете отключить его из Internet Option.Но помните, что ваш пользователь этого не сделает. – andyf

+0

Да, я уже пробовал, но он не работает –