jQuery 1.4.2 Использование .delegate () в событии изменения для раскрывающегося списка - PullRequest
1 голос
/ 28 августа 2010

Моя проблема в том, что я не уверен, как использовать .delegate для следующего сценария:

наше приложение имеет систему голосования, к которой можно добавить несколько раундов или этапов.каждый раз, когда добавляется новый шаг, появляется список опций, который определяет, как выиграть раунд / шаг.


<select class="listOfOptions">
<option value="U">Unanimous</option>
<br /><option value="M">Majority</option>
<br /><option value="C" class="customOption"># of votes&hellip;</option>
<br /></select>
</p>

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


$(document).ready(function() {

  $('.listOfOptions').live('change', function() {
    if ($(this).find(':selected').attr('class') == 'customOption') {
      // DO SOMETHING!!
    }
    else {
      // DO SOMETHING ELSE
    }
  });

});

Этот код отлично работает в любом другом браузере, кроме IE.

Как бы использовать .delegate () в качестве замены .live для этого случая?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 30 сентября 2010

Это будет синтаксис, используемый с .delegate () для этого конкретного случая. Обратите внимание, что listOfOptions - это класс раскрывающегося списка.


$('body').delegate('.listOfOptions', 'change', function() {
    if ($(this).find(':selected').attr('class') == 'customOption') {
      // DO SOMETHING!!    
    }
    else {
      // DO SOMETHING ELSE      
    }
  });

Работает как брелок во всех браузерах.

1 голос
/ 05 марта 2012

Не забудьте записать делегирование в блоке $(function() {}); или в $(document).ready(function() {});

. В IE 7-9 иначе работать не будет.

...