JQuery жить, изменения не работают в IE6, IE7 - PullRequest
16 голосов
/ 20 сентября 2009

Код ниже работает как положено в FF, но не в IE ...

$(document).ready(function() {

    $('div.facet_dropdown select').live('change', function() {
        var changed_facet = $(this).attr('id');
        var facets = $('select', $(this).closest('form'));
        var args = window.location.href.split('?')[0] + '?ajax=1';
        var clear = false;
        for(var i = 0; i < facets.length; i++) {
            var ob = $(facets[i]);
            var val = ob.val();
            if(clear) {
                val = '';
            }
            args += '&' + ob.attr('id') + '=' + val;
            if(ob.attr('id') == changed_facet) {
                clear = true;
            }
        }

        $.getJSON(args, function(json) {
            for(widget_id in json) {
                var sel = '#field-' + widget_id + ' div.widget';
                $(sel).html(json[widget_id]);
            }
        });

    });

});

Ответы [ 5 ]

24 голосов
/ 20 сентября 2009

$.live() не поддерживает событие change:

В настоящее время не поддерживается : размытие, фокус, ввод мыши, отпуск мыши, изменение, отправка http://docs.jquery.com/Events/live

Попробуйте использовать livequery вместо?

3 голосов
/ 07 апреля 2010

Примечание: jQuery 1.4 теперь поддерживает функцию live для всех обычных событий. До недавнего времени он не работал с IE8, но я считаю, что это исправлено в jQuery 1.4.2. См. Этот решенный тикет jQuery: IE8 НЕ ПОДДЕРЖИВАЕТ ИЗМЕНЕНИЕ СОБЫТИЯ ПРИ ИСПОЛЬЗОВАНИИ LIVE

2 голосов
/ 20 июня 2012

Также обратите внимание, что начиная с jQuery 1.7, вы должны использовать «on» вместо «делегировать» или «жить».

$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(document).on(events, selector, data, handler);        // jQuery 1.7+

Live имеет гораздо больше проблем, чем просто старая проблема «без изменений»: http://api.jquery.com/live/#typefn

2 голосов
/ 19 октября 2010

Используйте функцию delegate() вместо live(). Он такой же, как живой, но поддерживает больше событий и прекрасно работает в IE. В таком случае это будет

$('div.facet_dropdown select').delegate('change', function() { ... });

и соответствующая функция undelegate ()

2 голосов
/ 07 октября 2010

Я использовал -

jQuery('#id').find('select').live("click", function(){
  jQuery(this).change(function(){
    //your code
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...