событие клика для опции не работает в IE - PullRequest
8 голосов
/ 27 июля 2010

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

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

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

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

UPDATE

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

Ответы [ 7 ]

7 голосов
/ 27 июля 2010

не связывайте это по опции

$("#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');
        })
});
3 голосов
/ 27 июля 2010

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

Для этого добавьте атрибут size в элемент select, например:

<select type="multiple" size=4>
  <option>foo</option>
  <option>bar</option>
  <option>baseball</option>
</select>​​​​​​​​​​​​​​​​​​​​​​​​​

Теперь вы можете связать каждый option по отдельности.

Если вы хотите получить значение щелкаемой опции, используйте обработчик событий change и метод .val(), например:

$("#multiple_select").change(function() {
  var val = $(this).val();
  alert(val);
});
0 голосов
/ 04 октября 2011

Мне понравился ответ @ Reigel (принят), но мне нужно было улучшить его для использования в одном из моих проектов. В приведенном ниже коде я представляю новую функцию «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;
      }
    }
0 голосов
/ 27 июля 2010

Хорошо, вот некоторая странность IE:

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

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

0 голосов
/ 27 июля 2010

Используйте JQuery focus () для опции, а не click ().

Happy Coding.

0 голосов
/ 27 июля 2010
<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>

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

0 голосов
/ 27 июля 2010
$("#multiple_select").click(function(){
  alert($(this).children("option:selected").val());
});

следует на вещь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...