2016-04-09 20 views
0

Mouseover'da dinamik olarak doldurulmuş seçim seçeneği için değer döndürmeye çalışıyorum. Kimlik tarafından söyleyebileceğiniz gibi, seçim seçeneği bir ASP.NET liste kutusu tarafından oluşturulur.JQuery .on ("mouseover") yöntemi IE için çalışmıyor

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

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

Bu yöntem Chrome'da çalışır ama hiç şans ile benzer sorunlar için diğer halklar çözümleri çalışıyorlar değil IE 11

. Ben denedim ne

: (şu anda 1.8.3) JQuery ait

  • farklı sürümleri
  • .live yöntem
  • $(document).on("mouseover", "option", function()
  • $("#MainContent_LocationListBox option").on("mouseover", null, function()
  • seçkin seçenekler arasında döngü ve bağlayıcı Her bir
  • eki <meta http-equiv="X-UA-Compatible" content="IE=edge"> (advi buldum birkaç makale ce)

Ayrıca çok tutarsız bir şekilde çalışan $("#MainContent_LocationListBox option:hover").val() denedim.

Internet Explorer hata ayıklamayı açtım, ancak hiçbir hata döndürülmedi.

+0

Temsilci etkinlik dinleyicilerinizi "$ (document)" selektörüne koymak özensiz ve savurgan; bunları mümkün olduğunca hedeflere yakın bir yere koymalısınız. – Robusto

+1

Öğenin kimliği gibi belki de @Robusto? OP'nin kodu zaten ne yapıyor? – Clive

+0

Geliştiricilerin, Microsoft'un artık desteklemeyi reddettiği bir tarayıcıyı desteklemeye devam etmek zorunda kalmaları konusunda hala şaşkınım. –

cevap

1

Sen mousemove yerine mouseover kullanabilirsiniz.

GÜNCELLEME: Aşağıdaki kod Internet Explorer, Firefox ve Chrome çalışır Windows 10 test başarısız beri bir öneri here vermek sonrasında düzenlediği setTimeout çağrıyı ekledi:

$(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); 
    }); 
}); 

fareyi ayıklama olayları, konsoldaki (F12 ile görüntülenebilir) kayıt değerlerini alert kutularını açmayı tercih ederim.

+0

Bu, IE'de çalıştığını söylediğinizde bana inanıyorum, sadece benim için çalışmıyor (Win10 IEv11). Farklı JQuery sürümlerini, farklı meta etiketlerini, IE'yi, farklı belge modlarını ve kullanıcı aracısı dizelerini sıfırlamayı denedim. Konsolda 0 hata var. Sorunum şöyle görünüyor: "vurgulu", "tanımlı olmayan" bir zamanın% 99'unu döndürür. – bradyGilley

+0

Windows 7'de test ettim. Kod, Windows 10'unuzdaki diğer tarayıcılar için çalışıyor mu? – ConnorsFan

+0

Evet, Chrome'da harika çalışıyor. – bradyGilley

0

Seçme seçeneğine olay temsilcisi ekleme yerine, seçime ekleyin. Bunun yerine

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

Edit olay heyet olurdu eğer

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

Veya: Sana bir seçme kutusundan değerini almak nasıl mistunderanding düşünüyorum. JQuery ile seçim kutusunda $('select').val()'u kullanabilirsiniz. jQuery .sistem() ile olay heyeti üzerinde

fazla bilgi http://api.jquery.com/on/

+0

Bu, bağımsız seçeneğin değil seçiminin değerini döndürüyor gibi görünüyor. Ancak, $ (bu) seçenekler ve onların değerlerinin dizisini içerir. Bu diziye $ (this) [hoveredOptionIndex] .val() gibi bir şekilde erişmeye çalıştım ancak bir dizini başarılı bir şekilde çıkaramadım. – bradyGilley

+0

@bradyGilley Seçimin "değeri", kullanıcının seçtiği şeydir. Dizini istiyorsanız, 'selectNodeReference.selectedIndex' –

+0

ile kolayca edinebilirsiniz. Yani $ (this) [this.selectedIndex] .val()? Bu, hangisinin seçili olduğuna dair indeksi döndürüyor gibi görünüyor. Heceleme seçeneği için dizine ihtiyacım var. – bradyGilley