JQuery / Javascript: IE hover не охватывает параметры поля выбора?

У меня есть этот скрипт, чтобы расширить текстовое поле при наведении курсора мыши и сократить его при наведении курсора мыши.

Проблема, с которой я столкнулся, заключается в том, что Internet Explorer, похоже, не расширяет его при наведении курсора на параметры поля выбора.

Это означает, что в IE я могу щелкнуть по выбору, раскрыть параметры, но если я попытаюсь выбрать один, они исчезнут, а размер окна выбора изменится, как только я выйду из самого поля выбора.

Пример кода:

<script type='text/javascript'>
$(function() {
$('#TheSelect').hover(
    function(e){
        $('#TheText').val('OVER');
        $(this).width( 600 );
    },
    function(e){
        $('#TheText').val('OUT');
        $(this).width( 50 );
   }
);
});
</script>

И:

<input type='text' id='TheText' /><br /><br />

<select id='TheSelect' style='width:50px;'>
    <option value='1'>One</option>
    <option value='2'>Two</option>
    <option value='3'>Three</option>
    <option value='42,693,748,756'>Forty-two billion, six-hundred and ninety-three million, seven-hundred-forty-some-odd..... </option>
    <option value='5'>Five</option>
    <option value='6'>Six</option>
    <option value='7'>Seven...</option>
</select>

Существуют ли какие-либо обходные пути для полей выбора в IE? Я бы даже подумал о замене jquery, если кто-то может порекомендовать действительно надежный.

Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
18 326
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

По-видимому, IE не учитывает раскрывающуюся битовую часть элемента выбора. Это выполнимо, но нужно немного обмануть свойства expando и события размытия / фокуса, чтобы включить и отключить эффект «скрытия», чтобы он не срабатывал, когда мышь входит в раскрывающуюся часть элемента.

Попробуй это:

$(function() {
    var expand   = function(){ $(this).width(600) }
    var contract = function(){ if (!this.noHide) $(this).width(50) }
    var focus    = function(){ this.noHide = true }
    var blur     = function(){ this.noHide = false; contract.call(this) }
    $('#TheSelect')
        .hover(expand, contract)
        .focus(focus)
        .click(focus)
        .blur(blur)
        .change(blur)
});

(Приносим извинения, если jQuery использовать не так - я никогда не использовал его раньше :))

Похоже, этот пост был опубликован уже давно, но, надеюсь, есть люди, заинтересованные в обходном пути. У меня возникла эта проблема при создании нового сайта, над которым я работаю. На нем есть слайдер продукта, и для каждого продукта при наведении указателя мыши на продукт появляется большой информационный пузырь с информацией о продукте, раскрывающийся список для выбора вариантов покупки и кнопка покупки. Я быстро обнаружил, что всякий раз, когда моя мышь покидает начальную видимую область меню выбора (т. Е. Пытается выбрать вариант), весь пузырек исчезает.

Ответ (спасибо, умные люди, разработавшие jQuery) был о всплытии событий. Я знал, что самый простой способ решить проблему - это временно "отключить" состояние выключения при наведении курсора. К счастью, jQuery имеет встроенную функциональность для борьбы с всплыванием событий (они называют это распространением).

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

Вот и все! Решение оказалось гораздо более элегантным, чем я ожидал. Затем, когда мышь покидает пузырек, состояние зависания срабатывает нормально, и сайт продолжает заниматься своими делами. Вот исправление (я положил его в document.ready):

$(document).ready(function(){
  $(".dropdownClassName select").mouseleave(function(event){
    event.stopPropagation();
  });
});

у меня не очень хорошо работает, я фактически перемещаю раскрывающийся список и параметры при наведении, и это все еще вызывает прыжки в IE. Я могу видеть, как это решает проблемы большинства людей, хотя

roo2 28.07.2015 04:15

Была та же проблема, и ответ WorldWidewebb очень хорошо работал в IE8. Я просто сделал небольшое изменение, убрав «select» из селектора, так как я включил в селектор класс поля выбора. Сделал это действительно простым исправлением.

Кроме того, я без проблем реализовал его в меню, в котором используется плагин jquery hoverIntent. (Без помех).

Ответ WorldWideWeb сработал отлично.

У меня была немного другая проблема: у меня был эффект наведения на содержащий элемент (наведите указатель мыши, чтобы открыть меню выбора) поля формы, а пользователи IE не могли выбрать из раскрывающегося списка (он продолжал сбрасывать значение). Я добавил предложение globalweb (с идентификатором выбора) и альт, это сработало.

Вот что я сделал:

$(".containerClass").hover(function() {
    $(this).children("img").hide();
    $('#idOfSelectElement').mouseleave(function(event) { event.stopPropagation(); });
}, function() {
    $(this).children('img').show();
    $('#idOfSelectElement').mouseleave(function(event) { event.stopPropagation(); });

});

У меня была форма, которая была скрыта / отображена при наведении курсора. Если пользователь сфокусировался на выборе, форма скрывалась. Я смог решить свою проблему примерно так:

element.find('select').bind('mouseenter mouseleave',function(){
    //Prevent hover bubbling
    return false;
});

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