событие click для вариант не работает в IE

У меня есть несколько тегов выбора, и мне нужно написать функцию onclick его опций, потому что мне нужно получить значение последней нажатой опции, но когда я написал следующее

$("#multiple_select option").click(function()
{
     var val = $(this).val();
     alert(val);
});

он не работает в IE.

в чем проблема?

обновление

Мне нужно точно щелкнуть событие, потому что я уже написал функцию onclick event (demo здесь), и мне нужно исправить значение последнего измененного элемента, которое невозможно сделать без события click(я думаю)

7 ответов


не привязывайте его к опции

$("#multiple_select").click(function(){
     alert("works");
});

принято отвечать:

$(document).ready(function()
{
    var options = $("#supply_cities_select :selected");
    var lastOption;
    $("#supply_cities_select").click(function()
        {
            lastOption = $(this).find(':selected').not(options);
            options = $(this).find(':selected');
        })
});

если вы действительно хотите иметь click event на каждом варианте, вам нужно иметь List вместо dropdown стиль.

для этого добавьте


$("#multiple_select").click(function(){
  alert($(this).children("option:selected").val());
});

следует, что


<select id="multiple_select" size="4">
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
    <option value="4">Four</option>
</select>

<script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
<script type="text/javascript">

    $(document).ready(function() {
        $('#multiple_select').click(function() {
            alert($(this).val());
        });
    });

</script>

Окно предупреждения, в зависимости от сделанного вами выбора, показывает выбранное значение.


используйте jQuery focus () на опции, а не нажмите ().

Удачи В Кодировании.


хорошо, вот некоторые странности IE:

используя IE, в функции события click,event.srcElement.value дает значение последней нажатой опции.

попробуйте это:http://jsfiddle.net/Ch2DT/ (только протестировано в IE8, требуется работа, чтобы сделать его кросс-браузером)


Мне понравился ответ @Reigel (accepted), но его нужно было улучшить для использования в одном из моих проектов. В приведенном ниже коде я представляю новую функцию "findClickedOption", которая учитывает тот факт, что, возможно, пользователь повторно щелкнет уже выбранную опцию. Это все еще не учитывает CTRL-щелчок по нескольким параметрам, но для меня достаточно.

    var multiselect_s=$('#ms2side__sx');
    var options_s =multiselect_s.find('option:selected');
    multiselect_s.live('click',function(){
      var clickedOption =findClickedOption($(this), options_s);
      options_s = $(this).find('option:selected');
      doSomething(clickedOption);//call your own function here
    });

    function findClickedOption(selectbox, optionsArr){
      var selectedOptions=selectbox.find('option:selected');
      if(selectedOptions.size>1){
        return selectedOptions.not(optionsArr);        
      }else{
        return selectedOptions;
      }
    }