2010-03-31 5 views
10

Mã bên dưới hoạt động trong FF, Safari, Chrome. Nhưng IE đang cho tôi những vấn đề.IE không phát hiện phương pháp thay đổi jquery cho hộp kiểm

Khi chọn hộp kiểm, tôi không thể nhận được IE để phát hiện nó.

$("#checkbox_ID").change(function(){ 

    if($('#'+$(this).attr("id")).is(':checked')) 
    { 
     var value = "1"; 
    } 
    else 
    { 
     var value = "0"; 
    } 
    alert(value); 

    return false; 
}); 

Đơn giản, tôi không nhận được cửa sổ bật lên cảnh báo đó, như mong đợi.
Tôi thậm chí đã cố gắng nó theo cách này:

$("#checkbox_ID").change(function(){ 

    if($('#'+$(this).attr("id")'+:checked').attr('checked',false)) 
    { 
     var value = "1"; 
    } 
    else 
    { 
     var value = "0"; 
    } 
    alert(value); 

    return false; 
}); 

Dưới đây là các đầu vào hộp kiểm đơn giản: <input class="prod" type="checkbox" name="checkbox_ID" id="checkbox_ID" value="1"/>

Bất cứ ai cũng biết nếu IE đòi hỏi một phương pháp jquery khác nhau? hoặc là mã của tôi chỉ cần tắt?

Trả lời

5

Theo ghi nhận của sblom với IE7 và bên dưới, bạn cần yếu tố để làm mờ cho hành động này để bắn, sau đó phiên bản của trình duyệt IE và các trình duyệt khác không cần yếu tố để mất tập trung một cách rõ ràng, đơn giản là thay đổi sẽ kích hoạt sự kiện này (như trong ví dụ dưới đây của tôi).

Tôi tin rằng vấn đề của bạn có thể là bạn đang cố gắng truy cập vào biến 'giá trị' khi nó nằm ngoài phạm vi.

$("#checkbox_ID").change(function(){ 
var value; 
if($(this).is(':checked')) 
{ 
    value = "1"; 
} 
else 
{ 
    value = "0"; 
} 
alert(value); 

return false; 
}); 

Here is a working preview, hãy chú ý rằng vì bạn trả về false vào cuối của hàm nó reset hộp kiểm để giá trị trước đó của nó, như bạn đã hủy tác dụng của các nhấp chuột.

6

Nó có thể sẽ hoạt động nếu bạn nhấp vào một nơi khác sau khi bạn nhấp vào hộp kiểm. IE kỳ lạ như thế.

Có thể thử một cái gì đó như:

$(function() { 
    if ($.browser.msie) { 
    $('input:checkbox').click(function() { 
     this.blur(); 
     this.focus(); 
}); 

Thông tin thêm ở đây: http://norman.walsh.name/2009/03/24/jQueryIE

+0

Tôi biết điều này là vô nghĩa đến thời điểm ra (xem những gì tôi đã làm ở đó ?: P) như tôi chắc chắn đây là chỉ cho OP để kiểm tra mã của họ. Nhưng vì bạn đang ánh xạ các lệnh mờ/tiêu điểm cho một hành động nhấp chuột, để kích hoạt hành động thay đổi, sẽ không có ý nghĩa gì khi chỉ sử dụng thao tác nhấp chuột trong trường hợp này? Hoặc nếu bạn thực sự cảm thấy điều này là cần thiết, bạn có lẽ nên gọi $ (this) .trigger ('change'); – Jay

+0

Ý tưởng này làm việc tuyệt vời cho tôi. Tôi đã sử dụng nó trong prototypejs ... if (Prototype.Browser.IE) { el.observe ('click', function (e) { e.yếu tố(). blur(); e.element(). Focus(); }); } – apinstein

1

Sự kiện thay đổi duy nhất cháy khi thay đổi giá trị sau khi kiểm soát mất tập trung. Đối với hộp kiểm, tốt hơn là nên kết nối với sự kiện nhấp chuột.

Dưới đây là tài liệu trên khi cháy sự kiện onchange: link text

+0

Sự kiện nhấp chuột không phải là _quite_ giống như thay đổi. Nó thường khá gần, để có thể làm việc tốt. Nhưng có nhiều cách để thực hiện một cú nhấp chuột trong lực lượng IE thay đổi để được gọi trong trường hợp thay đổi hoàn toàn. – sblom

+1

Dưới đây là thông tin thêm về sự kiện thay đổi. http://www.quirksmode.org/dom/events/change.html. – R0MANARMY

+0

Điều này không đúng trong tất cả các trường hợp, vui lòng xem báo giá dưới đây từ tài liệu API jQuery. "Đối với các hộp chọn, hộp kiểm và nút radio, sự kiện được kích hoạt ngay lập tức khi người dùng lựa chọn bằng chuột, nhưng đối với các yếu tố khác, sự kiện được hoãn lại cho đến khi yếu tố mất tiêu điểm." Được trích dẫn từ http://api.jquery.com/change/ – Jay

1

Bạn cần sử dụng sự kiện propertychange thay vì sự kiện change. Hãy nhớ rằng sự kiện propertychange sẽ kích hoạt trên những thứ khác ngoài kiểm tra/bỏ chọn. Để bù đắp cho điều này, bạn phải kiểm tra window.event.propertyName (đối với IE chỉ):

$(':checkbox').bind($.browser.msie ? 'propertychange': 'change', function(e) { 
    if (e.type == "change" || (e.type == "propertychange" && window.event.propertyName == "checked")) { 
     // your code here 
    } 
}); 
+0

Điều này vi phạm trên IE9 +. Cần kiểm tra phiên bản trình duyệt dành cho IE8 trở xuống. – Muhd

0

hãy thử sử dụng

jQuery('#checkbox').click(handleFunc); 

thay vì sự kiện "thay đổi"