2010-03-31 4 views
10

아래의 코드는 FF, Safari, Chrome에서 작동합니다. 그러나 IE는 저에게 문제점을주고 있습니다.IE가 jquery 변경 방법을 체크하지 않습니다.

확인란을 선택하면 IE에서이를 감지 할 수 없습니다.

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

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

    return false; 
}); 

간단히 말해서 나는 예상치 못한 경고 팝업을 표시하지 않습니다.

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

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

    return false; 
}); 

여기에 간단한 체크 박스 입력입니다 : IE는 다른 JQuery와 방법을 필요로하는 경우 <input class="prod" type="checkbox" name="checkbox_ID" id="checkbox_ID" value="1"/>

누구나 알고
나는 심지어이 방법을 시도했습니다? 아니면 그냥 내 코드인가?

답변

5

당신이 흐려 이후 IE의 버전과 다른 브라우저하지를 요소가 필요합니다 : 여기

은 onchange를 이벤트가 발생 때에 대한 설명서입니다 명시 적으로 포커스를 잃게하려면 요소가 필요합니다. 단순히 변경하면이 이벤트가 발생합니다 (아래 예제 참조).

범위를 벗어 났을 때 'value'변수에 액세스하려고하면 문제가 발생할 수 있다고 생각합니다.

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

return false; 
}); 

Here is a working preview

, 당신은 함수의 끝에서 false를 반환하기 때문에 사용자가 클릭의 효과를 취소 한대로, 이전 값으로 체크 박스를 재설정 것을 알 수 있습니다.

6

확인란을 클릭하면 다른 곳을 클릭하면 작동합니다. IE는 그렇게 이상 해요. 여기

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

더 많은 정보 : 제어 후 값이 변경 포커스를 잃을 경우에만 화재 http://norman.walsh.name/2009/03/24/jQueryIE

+0

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

를 사용해보십시오 : 이것을 보상하기 위하여는, 당신은 window.event.propertyName (IE 전용) 확인해야합니다 out (내가 거기에서 한 것을 보시오? : P) 이것은 OP를 위해서만 그들의 코드를 테스트 할 것이라 확신한다. 그러나 흐림/포커스 명령을 클릭 동작에 매핑하기 때문에 변경 동작을 트리거하려면이 경우 클릭 동작 만 사용하는 것이 좋지 않습니까? 또는 이것이 정말로 필요하다고 느낀다면 아마도 $ (this) .trigger ('change')라고해야합니다. – Jay

+0

이 아이디어는 저에게 큰 도움이되었습니다. 나는 프로토 타입에 그것을 사용했다 ... if (Prototype.Browser.IE) { el.observe ('click', function (e) { e.element(). blur(); e.element(). focus(); }}); } – apinstein

1

변경 이벤트

같은 뭔가를 시도 할 수 있습니다. 확인란의 경우 클릭 이벤트에 연결하는 것이 좋습니다. 이 작업은 화재에 대한 IE7과 아래에 sblom에서 언급 한 바와 같이 link text

+0

클릭 이벤트가 변경 사항과 동일하지 않습니다. 일반적으로 꽤 가깝기 때문에 잘 작동합니다. 그러나 IE의 클릭을 강제로 변경하여 선의의 변경이있을 경우 호출되도록하는 방법이 있습니다. – sblom

+1

변경 이벤트에 대한 자세한 내용은 다음과 같습니다. http://www.quirksmode.org/dom/events/change.html. – R0MANARMY

+0

모든 경우에 해당되는 것은 아닙니다. jQuery API 문서의 아래 인용문을 참조하십시오. "선택 상자, 확인란 및 라디오 버튼의 경우 사용자가 마우스로 선택하면 이벤트가 즉시 발생하지만 다른 요소 유형의 경우 요소가 포커스를 잃을 때까지 이벤트가 연기됩니다." http://api.jquery.com/change/에서 인용 됨 – Jay

1

change 이벤트 대신 propertychange 이벤트를 사용해야합니다. propertychange 이벤트는 체크 표시/선택 취소 이외의 항목에서 실행됩니다.

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

이것은 IE9 +에서 중단되었습니다. IE8 이하 버전의 브라우저 버전을 확인해야합니다. – Muhd

0

이 점에 의미가있다 대신 이벤트 "변화"내가 아는

관련 문제