2016-04-09 2 views
0

Я пытаюсь вернуть значение для динамически заполняемого параметра выбора при наведении указателя мыши. Как вы, вероятно, можете сказать по ID, опция выбора создается списком ASP.NET.Метод JQuery .on ("mouseover") не работает для IE

$("#MainContent_LocationListBox").on("mouseover", "option", function() { 

    alert($(this).val()); 
}); 

Этот метод работает в Chrome, но не IE 11.

Я пытался друга решения народов для подобных проблем не повезло.

Что я пробовал:

  • Различные версии JQuery (в настоящее время 1.8.3)
  • .live метод
  • $(document).on("mouseover", "option", function()
  • $("#MainContent_LocationListBox option").on("mouseover", null, function()
  • Перебор избранных вариантов и связывания прикосновения к каждому
  • Добавление <meta http-equiv="X-UA-Compatible" content="IE=edge"> (advi из нескольких статей, которые я нашел)

Я также пробовал $("#MainContent_LocationListBox option:hover").val(), который работает, но очень непоследовательно.

Я включил отладку Internet Explorer, но ошибки не возвращаются.

+0

Неверный и расточительный перенос ваших делегированных прослушивателей событий в селектор '$ (document)'; вы должны максимально приблизить их к цели. – Robusto

+1

Как идентификатор элемента, возможно, @Robusto? Как и в том, что уже делает код OP? – Clive

+0

Я до сих пор смущен, почему разработчики должны продолжать поддерживать браузер, который даже Microsoft отказывается от поддержки. –

ответ

1

Вы можете использовать mousemove вместо mouseover. Приведенный ниже код работает в Internet Explorer, Firefox и Chrome:

UPDATE: Так как тест на Windows 10 не удалось, я добавил setTimeout вызов по предложению дать here:

$(document).ready(function() { 
    var prevValue = null; 

    $("#MainContent_LocationListBox").mousemove(function() { 
     setTimeout(function() { 
      var val = $('option:hover', $("#MainContent_LocationListBox")).val(); 

      if (typeof val !== 'undefined') { 
       if (val !== prevValue) { 
        console.log(val); // To be replaced by actual processing 
        prevValue = val; 
       } 
      } 
      else { 
       prevValue = null; 
      } 
     }, 0); 
    }); 
}); 

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

+0

Я верю вам, когда вы говорите, что это работает в IE, это просто не работает для меня (Win10 IEv11). Я пробовал разные версии JQuery, разные метатеги, сброс IE, различные режимы документа и строки пользовательского агента. В консоли есть 0 ошибок. Моя проблема кажется «: hover» возвращает значение «undefined» в 99% случаев. – bradyGilley

+0

Я тестировал в Windows 7. Код работает для других браузеров на Windows 10? – ConnorsFan

+0

Да, отлично работает в Chrome. – bradyGilley

0

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

$("#MainContent_LocationListBox").on("mouseover", function() { 
    alert($(this).val()); 
}); 

Или, если вы предпочли бы иметь событие делегация

$("section").on("mouseover", "#MainContent_LocationListBox", function() { 
    alert($(this).val()); 
}); 

Edit: Я думаю, что вы mistunderanding как получить значение из выбранного окна. С помощью jQuery вы можете использовать $('select').val() в поле выбора.

Более подробная информация о передаче события с JQuery .on() http://api.jquery.com/on/

+0

Кажется, это возвращает значение выбранного не индивидуального варианта. Тем не менее, $ (this) содержит массив опций и их значений. Я попытался получить доступ к этому массиву с чем-то вроде $ (this) [hoveredOptionIndex] .val(), но не смог успешно извлечь индекс. – bradyGilley

+0

@bradyGilley «Значение» выбора - это то, что выбрал пользователь. Если вам нужен индекс, вы можете легко получить его с помощью 'selectNodeReference.selectedIndex' –

+0

Так как $ (this) [this.selectedIndex] .val()? Кажется, это возвращает индекс для выбранного параметра. Мне нужен индекс для зависания. – bradyGilley

Смежные вопросы