2010-01-12 3 views
1

jQuery hide() 및 show() 메소드에 문제가 있습니다. 아래는 현재 작업중인 프로젝트의 스 니펫입니다. 이 코드는 완전히로드 된 다중 페이지 양식에서 가져온 것입니다. jQuery는 다양한 페이지를 표시하거나 숨기는 데 사용됩니다. 나는이 기술이 IE7을 제외한 모든 broswer에서 작동한다는 것을 알아야한다.jQuery IE7에서 메소드 숨기기/보이기

//Hide all pages of the form 
$("#client_form div[id*='client']").hide(); 
//Show just the first page 
$("#client_form div#client1").show(); 

hide()가 실패하지만 다음 show()가 원하는 페이지를 다시 가져 오지 않는 것이 문제입니다. 나는 slideUp()과 slideDown()과 같은 다른 메소드를 사용해 보았습니다. css ("display", "none"), hide/show를 수행하는 다양한 방법을 시도했습니다.

나는 또한 숨기기에서 다음에 콜백을하는 체이닝 방법을 시도했습니다. 아무것도 IE7에서 제대로 작동하는 것 같습니다.

어떤 생각이든 스택 오버플로 하이브 마음?

많은 감사, 닐

답변

2

DIV의 ID를 사용해 보셨습니까? 페이지에 고유하므로 양식에 상대적으로 지정할 필요가 없습니다.

$("div[id*='client']").hide().filter('#client1').show(); 

참고는 DOM을 retraverse해야하지만 단순히 이미 발견 한 요소를 필터링하지 않도록 체인.

+0

성능 질문 - .filter ('# client1')가 $ ('# client1')을 수행하는 것보다 빠르거나 느릴 것입니까? 나는 jQuery가 getElementById를 사용하게하는 것이 가장 빠를 것이라고 생각한다. (그리고 아니, downvote 날 아니, 나도 맞았 어) – Parrots

+0

필터는 단순히 요소의 배열을 통해 그들 중 하나가 선택기와 일치하는지 확인합니다. DOM 전체를 돌아가는 것보다 훨씬 빠릅니다. – tvanfosson

+0

OK, cool, thanks, 항상 궁금해. – Parrots

0

당신이 숨기려고, 그 클래스를 숨기고 모든 div의에 클래스를 추가하는 시도합니다. 또한 엄청난 선택기 대신 $ ("# client1")을 사용하도록 쇼 선택기를 변경하십시오.

1

무엇 막 :

$("#client1").show(); 

그게하지만 그것에게 주사를 확실하지? ID는 고유해야하므로 계층 적 선택자가 필요하지 않습니다.

0

두 번째 jQuery가 올바른 객체를 반환하는지 확인하기 위해 간단한 테스트를 수행 했습니까? 예 :

alert($("#client_form div#client1").length); 

또는

alert($("#client_form div#client1").get(0).innerHTML); 

또는

alert($("#client_form div#client1").eq(0).text()); 

?

이것이 내가 처음 시작할 것입니다. 그러면 show() 메서드에 문제가 있는지, jQuery 선택기의 동작에 대해 알았을 것입니다.

+0

downvote에 관심을 가져 주셔서 감사합니다. 내 의도는 그가 그 자신을 해결하는 데 도움이 될 몇 가지 수표로 그를 가리키는 것이 었습니다. 위의 코드는 그 자체의 대답이 아니 었습니다. 그만큼 답이 없으므로 투표를하지는 않지만 투표는 안되니? – Graza

+0

Drive-by downvoter, 나는 의심한다. 일반적으로 나는 경고를 피할 것이지만 IE7이 디버깅보다 좋을지 모르겠다. IE8에서는 개발자 도구를 사용한다. – tvanfosson

0

또한 유효성 검사기를 통해 최종 HTML 마크 업을 실행하여 오류가 있는지 확인할 수도 있습니다. IE7은 다른 대부분의 브라우저보다 엄격합니다.

관련 문제