2009-09-20 5 views
16

Đoạn code dưới đây làm việc như mong đợi trong FF nhưng không phải trong IES ...jQuery sống, sự thay đổi trong không làm việc trong IE6, IE7

$(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]); 
      } 
     }); 

    }); 

}); 
+0

Bạn đã cố gắng để suy ra những gì đang gây ra vấn đề ít nhất? – strager

+0

đó là những gì không hoạt động? –

Trả lời

24

$.live() không hỗ trợ các sự kiện change:

Hiện nay không được hỗ trợ: mờ, lấy nét, mouseenter, MouseLeave, thay đổi, nộp http://docs.jquery.com/Events/live

Hãy thử sử dụng livequery để thay thế?

+2

Hoàn hảo! Cám ơn rất nhiều! livequery làm các trick! –

+0

Chạy vào vấn đề chính xác này và thậm chí đọc tài liệu và bỏ lỡ sự không hỗ trợ. – wesgarrison

+1

Chỉ muốn đăng cập nhật cho điều này. Trước tiên, tôi nhận thấy URL bạn đã đăng hiện đang chuyển hướng đến http://api.jquery.com/live/. Thứ hai, đoạn bạn trích dẫn về sự kiện thay đổi là "hiện không được hỗ trợ" không còn được tìm thấy trên trang này, vì nó có vẻ như I.E. hỗ trợ bây giờ làm việc trong jquery 1.4.2. Tôi đã chỉ gặp vấn đề tương tự trên một trang sử dụng 1.3.2, nâng cấp nó lên 1.4.2, và nó bây giờ làm việc như một say mê. Cảm ơn! – Funka

3

Lưu ý: jQuery 1.4 hiện hỗ trợ chức năng trực tiếp cho tất cả các sự kiện bình thường. Nó đã không làm việc với IE8 cho đến gần đây, nhưng tôi tin rằng điều này là cố định với jQuery 1.4.2. Xem vé này giải quyết jQuery: IE8 DOES NOT SUPPORT THE CHANGE EVENT WHILE USING LIVE

+2

Xin lỗi, bỏ phiếu cho câu trả lời này vì câu hỏi được đề cập IE6 và IE7 (không phải IE8) và nó vẫn không hoạt động trong IE6 với jQuery 1.4.2 vì IE6 không làm bong bóng sự kiện thay đổi. Chỉ để tránh mọi người nghĩ rằng điều này được giải quyết. –

+0

@Bernhard Nhận xét của bạn vừa lưu tôi 2 giờ làm việc –

2

tôi đã sử dụng -

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

Sử dụng delegate() chức năng thay vì live(). Nó giống như sống, nhưng hỗ trợ nhiều sự kiện hơn và hoạt động tốt trong IE. Trong trường hợp yout nó sẽ được

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

và phóng undelegate() chức năng

2

Cũng lưu ý rằng như jQuery 1,7 bạn nên sử dụng "vào" thay vì đại biểu hoặc sống.

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

sống bị một loạt vấn đề nhiều hơn chỉ là vấn đề "không có sự kiện thay đổi" cũ: http://api.jquery.com/live/#typefn