2010-01-19 10 views
7

Tôi có điều này đơn giản chọn:jQuery 1,4 sự kiện thay đổi lỗi trong IE

<select name="zlecenia_index_icpp" id="items_per_page"> 
    <option value="10">10</option> 
    <option value="25" selected="selected">25</option> 
    <option value="50">50</option> 
</select> 

và trên đó có:

$('#items_per_page').change(function(){ 
    var controller_action = this.name.replace(/_/g, '/'); 
    location.href = config.base_url + '/' + controller_action + '/'+this.value; 
}); 

Nó đã từng làm việc trong jQuery 1.3, nhưng trong 1,4 sự kiện thay đổi là bắn ngay sau khi tôi nhấp vào hộp chọn. Có giải pháp nào ngoài việc quay lại 1.3 không?


Điều này thực sự có vẻ là một lỗi và nó đã được báo cáo với jQuery:

http://dev.jquery.com/ticket/5869

Hiện đã có một miếng vá áp dụng và sẽ là một phần của jQuery 1.4.1.

http://github.com/jquery/jquery/commit/435772e29b4ac4ccfdefbc4045d43f714e153381

+1

Tôi đã báo cáo lỗi tại đây: http://dev.jquery.com/ticket/5869 –

+0

Phiên bản IE cụ thể? – ScottKoon

+0

Tôi đã thấy nó trên IE 7 với XHTML 1.0 Strict trong trường hợp của tôi. –

Trả lời

-4

Bạn có thể sử dụng các sự kiện blur() của jquery. Có lẽ một cái gì đó như thế này:

var defaultValue = 10; 

$('#items_per_page').blur(function(){ 
    if ($("#items_per_page").val() == defaultValue) 
     return; //The value wasn't changed, so return. 
    var controller_action = this.name.replace(/_/g, '/'); 
    location.href = config.base_url + '/' + controller_action + '/'+this.value; 
}); 
+0

Điều này có tác dụng tương tự như sự kiện thay đổi. Tôi nghĩ rằng chìa khóa để nó làm việc cho bạn là bạn đã bao gồm một gián đoạn. –

0

Tôi không chắc chắn nếu nó là nghĩa vụ phải làm việc theo cách này, nhưng bạn đang truy cập this.valuethis.name trong callback tương tự. Tôi giả sử this đề cập đến event.currentTarget, trong trường hợp này là phần tử SELECT.

Trong trường hợp đó, this.value sẽ không được xác định, nhưng bạn có thể thử sử dụng $(this).val(); để thay thế.

Bạn đã thử an ủi các biến?

+2

Mọi thứ đã hoạt động được một năm với 1.3, nó chỉ là vấn đề với jQuery 1.4 trong IE. – pambuk

+0

This.value và this.name cung cấp cho bạn điều gì? – David

+0

this.value là giá trị của tùy chọn đã chọn, là giá trị của lựa chọn; this.name là chọn tên. – pambuk

3

Từ http://jquery14.com/day-01/jquery-14

changesubmit sự kiện bình thường (Thay đổi Tài liệu, Gửi Documentation)

Sự thay đổi và trình các sự kiện làm việc đáng tin cậy trên các trình duyệt cho cả sự kiện bình thường và sống. Chúng tôi ghi đè thay đổi bình thường và gửi sự kiện trong Internet Explorer và thay thế chúng bằng các sự kiện hoạt động giống hệt với các trình duyệt khác.

OK, có vẻ như đó là lỗi, trong IE hoặc JQuery.

Điều gì gây ra sự cố là thuộc tính được chọn = "đã chọn" trên tùy chọn đang gây ra sự kiện thay đổi kích hoạt trước khi xảy ra sự kiện chuột. Đoán của tôi là, nó là một sự kỳ quặc/lỗi với IE vì nó xuất hiện mà nó không thiết lập các phần tử được chọn UNTIL nó có thể nhìn thấy, do đó gây ra sự thay đổi thậm chí để bắn khi thả xuống ban đầu. Tôi nói đó là một lỗi trong IE bởi vì nếu tôi gọi window.event.cancelBubble, trình xử lý sự kiện sẽ không cháy.

Điều đó thật kỳ lạ.

Giải pháp thay thế là xóa thuộc tính đã chọn.

+0

nó chắc chắn là một lỗi trong jQuery 1.4, thêm một thuộc tính onchange cho các công trình chọn tốt trong IE bất kể thuộc tính nào được chọn trên các tùy chọn con. –

+0

Vâng, đó là lỗi đã được sửa trong 1.41. – ScottKoon

0

tôi vẫn nhận được một vấn đề tương tự ngay cả với 1.4.1.

Sử dụng ví dụ dưới đây:

  1. Chọn một giá trị từ danh sách lựa chọn - một cảnh báo xuất hiện (đúng).
  2. Nhấp vào liên kết Thay đổi - chọn danh sách đặt lại thành 0 (Chính xác).
  3. Nhấp vào danh sách Chọn - một cảnh báo sẽ xuất hiện. (Sai)

Cảnh báo trong bước thứ ba không xuất hiện trong 1.3.2.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
    <title>Untitled Page</title> 

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script> 

    <script type="text/javascript"> 

    $(document).ready(function(){ 
     $('#dropDownList1').bind('change',function(){ alert("changed"); }); 

     $('#btnChange').click(function(){ 
      $('#dropDownList1')[0].selectedIndex = 0; 
     }); 
    }); 


    </script> 
</head> 
<body> 
     <select id="dropDownList1"> 
      <option value="0">0</option> 
      <option value="1">1</option> 
      <option value="2">2</option> 
     </select> 

     <a href="#" id="btnChange">Change</a> 
</body> 
</html> 
+0

Tôi đã báo cáo lỗi cho việc này - http://dev.jquery.com/ticket/5959 – Rezler

+0

Điều này chỉ xảy ra sau khi sử dụng liên kết 'Thay đổi' và thậm chí sau đó nó chỉ xảy ra một lần (ie7). – pambuk