2009-09-04 1 views
1

해당 확인란의 목록에서 요소를 제거 할 이벤트 처리기가 있습니다. 선택 취소되어 있습니다. 체크 박스의 클릭 이벤트의 핸들러에서 먼저 그 체크 박스 라벨의 값을 복사 :IE7에서이 두 문자열이 같다고 생각하지 않는 이유는 무엇입니까?

var label = $(this).next().html(); 

그럼, 목록 항목을 반복하고 라벨에 각각의 비교 :

$("#sortable li").each(function() { 
    if ($(this).html() === label) { 
     $(this).remove(); 
    } 
    }); 

Internet Explorer 8과 Firefox의 경우 예상대로 작동합니다. Internet Explorer 7에서는 그렇지 않습니다. "if"문에서 조건은 결코 참이 아닙니다. 내가 여기서 무엇을 놓치고 있니?

요청에 따라 비교되는 문자열은 한 사례에서 "Charge"및 "Charge"입니다.

+1

'==='대신'=='를 사용하면 작동합니까? – Kip

+1

두 문자열이 무엇인지 알면 도움이됩니다. –

+0

== 또는 ===와 함께 작동하지 않습니다. – Rafe

답변

2

왜 스크립트 디버거를 사용하지 않고 그 비교가 잘못된 이유를 확인합니까? if에 중단 점을 설정하고 변수를 살펴보십시오.

Internet Explorer 8의 내부 스크립트 디버거 그냥 설정하고 읽을 jQuery's data method를 사용하는 다른 방법의 자바 스크립트 실행

+0

IE7의 IE8 디버거에서 실행하면 문제가 발견되었습니다. 어떤 이유에서 IE는 HTML 소스에 없지만 Firefox와 IE8이 추가하지 않아도 문자열 끝에 공백을 추가합니다. – Rafe

+0

나는 IE7 브라우저 모드를 의미했습니다. – Rafe

1

디버깅 해 보셨습니까? 경고를 사용하여 두 값이 보유하고있는 것을 확인하고 함수가 IE7에서 실제로 호출되는지 확인하고 동일한 유형인지 확인하십시오.

4
  1. alert(label)alert($(this).html())을 비교하여 정확히 무엇이 비교되는지 확인하십시오.
  2. 엄격한 비교 (===)를 사용하는 이유가 표시되지 않으며 일반적인 비교 (==)를 사용하면 도움이 될 수 있습니다.
  3. 당신이하고 싶은 말을하는 방법으로,이 모든 것은 꽤 미친 것처럼 보입니다. ID와 같은 HTML 콘텐츠보다 목적에 맞게 설계된 항목으로 해당 DOM 요소를 식별하는 것이 좋습니다.
+0

물론 alert() 함수로 디버깅을 시도했습니다. 문자열은 동일합니다 (시각적으로). 그리고 물론 그들은 정확히 동일한 방식으로 (jQuery의 html() 메소드를 사용하여) 모두 얻어진다. – Rafe

+0

그리고 요소가있는 한 적절한 선택기를 사용하면이 경우 ID를 사용하는 것보다 덜 강력하고 내용이 어리석은 문자열 파싱 트릭을 수행하지 않아도됩니다. – Rafe

0

하지 여기에 직접적인 질문에 대답하지만, IE7에서 스크립트를 실행 호환 모드로 전환, 당신을 도울 것입니다 직접 요소에 플래그 : 당신이 어떤 시점에서 label를 조작한다면 물론

$(this).next().data("toRemove", true); 

//... 

$("#sortable li").each(function() { 
    if ($(this).data("toRemove")) { 
    $(this).remove(); 
    } 
}); 

은, 다음이 당신이 원하는 것이 아닐 것입니다. 나는 단지 이것을 언급합니다. 왜냐하면 .data()은 제가 많이들은 적이없는 매우 유용한 jQuery 기능이기 때문입니다. 일주일 전까지는 그것에 대해 알지 못했습니다.