jQuery直播,改变不在IE6,IE7中工作

时间:2009-09-20 19:12:00

标签: javascript jquery internet-explorer

下面的代码在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 个答案:

答案 0 :(得分:24)

$.live()不支持change事件:

  

目前不支持:模糊,焦点,鼠标中心,鼠标移动,更改,提交   http://docs.jquery.com/Events/live

尝试使用livequery代替?

答案 1 :(得分:3)

注意:jQuery 1.4现在支持所有正常事件的实时函数。它直到最近才与IE8一起使用,但我相信这是用jQuery 1.4.2修复的。查看此已解析的jQuery票证:IE8 DOES NOT SUPPORT THE CHANGE EVENT WHILE USING LIVE

答案 2 :(得分:2)

我用过 -

jQuery('#id').find('select').live("click", function(){
  jQuery(this).change(function(){
    //your code
  });
});

答案 3 :(得分:2)

使用delegate()功能代替live()。它与live相同,但支持更多事件并在IE中正常工作。在你的情况下它将是

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

和通讯员undelegate()函数

答案 4 :(得分:2)

另请注意,从jQuery 1.7开始,您应该使用“on”而不是delegate或live。

$(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