Div, упаковывающий элемент выбора HTML в Internet Explorer

У меня есть элемент выбора HTML, который я обертываю с div. Я в основном делаю пользовательский выпадающий список с множественным выбором, чтобы, когда пользователь щелкает по нему, вместо того, чтобы показывать обычные опции, он показывает список со множественным выбором, всплывающий в div под ним. (Существует также небольшая панель инструментов div чуть выше этого, которая появляется при нажатии с кнопками clear, select all и ok.) Элемент select HTML должен быть не щелкаемым и содержать выбранные элементы с помощью Javascript во время выполнения. Мой код работает нормально в FireFox и Chrome, но в IE9 элемент выбора выбора по какой-то причине по-прежнему активен, даже если он заключен в div. По-видимому, он истекает через оболочку div. Я знаю, что могу отключить опцию выбора, но хочу, чтобы она выглядела включенной. Я не хочу, чтобы опция HTML выбиралась кликабельной, поэтому я наложил на нее div и установил тип курсора на указатель. Я хочу, чтобы пользователь мог щелкнуть на элементе div, расположенном над элементом HTML select, а затем показать мой всплывающий список под ним, эффективно создавая пользовательский элемент управления. Вот фрагмент из моего кода. Я строю это из JavaScript динамически и в конце устанавливаю el.innerHTML. (Кстати... я могу использовать YUI и прототип, но не JQuery в этом проекте.)

var listText = '<select id="' + this.key + '" format="MultiList" class="' + inputClass + '" value="' + val + '"><option name="">' + val + '</option></select>';

var markup = "<div id='listBoxCtrlWrap_"+this.key+"' style='display:inline-block; position:relative; cursor: pointer; width:100%;'>";
markup += listText;
markup +=      "<div id='divWrap_"+this.key+"' title='"+tooltip+"' style='position:absolute; left:0; right:0; top:0; bottom:0;'></div>";
markup +=      "<div id='listBoxWrap_"+this.key+"' style='display:none; cursor:default;'>";
markup +=        "<div id='listBoxToolbarWrap_"+this.key+"' style='position:absolute; left:0px; top:23px; height:23px; width:99.7%; z-index:90; background-color:#c7ccd2; "; 
markup +=                                                         "border:1px solid #575757; border-bottom-style:none;'/>";
markup +=    "<div style='position:absolute; left:6px; top:2px; z-index:95;'><img     id='listBoxToolbarClear_"+this.key+"' style='cursor:pointer;' src='images/clear_btn.png'/></div>";
markup +=    "<div style='position:absolute; left:62px; top:2px; z-index:95;'><img id='listBoxToolbarSelectAll_"+this.key+"' style='cursor:pointer;' src='images/select_all_btn.png'/></div>";  
markup +=    "<div style='position:absolute; right:10px; top:3px; z-index:95;'><img id='listBoxToolbarOKBtn_"+this.key+"' style='cursor:pointer;' src='images/blue_ok_btn.png'/></div>";

markup +=        "</div>";
markup +=        "<div style='position:absolute; left:0px; top:45px; height: 100%; width:100%; z-index: 100;'>";
markup +=          "<select id='listBoxSelector_"+this.key+"' multiple='multiple' style='height:83px'>";
markup +=            "<option name='loading'>Loading, please wait...</option>";    
markup +=          "</select>";
markup +=        "</div>";
markup +=      "</div>";
markup +=    "</div>";

el.innerHTML = markup;

Интересно, что если я наведу указатель мыши на границы HTML-выделения, я получу значок стрелки указателя и смогу щелкнуть по нему, открыв мой собственный список div. Но если я нажму в середине HTML-кода, он просто откроет список опций. (Я не хочу, чтобы тот когда-либо открывался для пользователя. Он будет хранить только их выборы.) Опять же, это не работает только в IE. Я использую IE9. Любые предложения или идеи, что может быть не так?

2 ответа

Решение

Я нашел решение моей проблемы. Этот jsfiddle показывает это: http://jsfiddle.net/willjones/RTV8J/2/ По сути, я добавил цвет в оверлей div и затем установил его прозрачность как полностью прозрачную.

markup += "<div id='divWrap_"+key+"' title='"+tooltip+"' style='position:absolute; left:0; right:0; top:0; bottom:0;  background-color:#ffffff; opacity:0;'></div>";

Это сработало для IE и не оказало вредного влияния на Firefox или Chrome (которые уже работали). Спасибо!

Это может или не может быть полезным, но всякий раз, когда я сталкиваюсь с проблемой, которая существует только в IE9 (или IE8) и не воспроизводится в FF или Chrome, мое первое предположение заключается в том, что я использую некоторые функции HTML5 или CSS3, которые IE делает не поддерживается. Для этого есть обходные пути (html5shiv и css3 pie), но они не идеальны. Как вы думаете, вы могли бы создать jsfiddle из того, что вы пытаетесь сделать?

Другие вопросы по тегам