2009-04-21 3 views
1

"login"이라는 jQuery 대화 상자에 양식이 있습니다. JavaScript에서는 URL에 "#login"이 있는지 감지합니다. 그렇다면 로그인 대화 상자를 표시합니다. FF/Safari/Chrome에서는 제대로 작동하지만 IE6/7에서는 브라우저 페이지가 대화 상자가 표시 될 때 폼의 맨 위로 이동합니다. 이런 일이 발생하지 않도록하고 싶습니다. 페이지가로드 될 때 #name으로 점프하지 못하도록 브라우저를 중지하십시오.

나는이 예제 코드를 제공합니다 내 질문 here,에 대한 답변 속에서 발견 : 나는 "a.anchor"을 "form.anchor"를 변경

$('a.anchor').remove().prependTo('body'); 

를하지만 제대로 작동하지 않습니다 . 내가 처음 mydomain/login을로드 할 때 IE는 여전히 폼의 맨 위로 이동합니다. 그런 다음 페이지를 새로 고치면 다시 대화 상자가 표시되지만 아래로 점프하지는 않습니다.

모든 아이디어가 IE가 모든 양식/앵커 이름으로 점프하는 것을 어떻게 막을 수 있습니까?

+1

해시 기호를 사용하여 문서 위치로 점프하는 기능 이외의 기능을 구현하는 특별한 이유가 있습니까? 내 말은 ... 그것이 그것이 무엇을위한 것인지, 그렇게 설계된대로 작동 할 때 불평하지 마라. :) – Tomalak

답변

3

........ 코드에 사용하고 싶지 않은 명명 된 앵커를 두지 않으시겠습니까?

+0

양식을 올바르게 제출할 수 있도록 이름이 있어야합니다. – CMB

+0

그럼 왜 검색어 매개 변수를 사용하지 않으시겠습니까? – harpo

+1

@CMB : 폼의 이름을 "loginForm"으로 변경하십시오. 그러면 #login이 스크롤되는 것을 멈추어야합니다. 또는 #login을 #showLogin으로 변경하고 "login"양식을 보관하십시오. –

4

검색어 매개 변수 또는 page.html? showlogin = true와 같은 것을 사용하는 것이 좋습니다. URL의 page.html # xxxxx는 브라우저에서 페이지의 해당 ID로 스크롤하는 것을 의미합니다.

http://www.w3schools.com/html/html_links.asp 중간에 이름 속성이 설명되어 있습니다.

그렇지 않으면 브라우저가 수행해야하는 작업을 수행하는 데 지저분한 해킹을 수행하게됩니다.

0

이렇게 해시 표시를 사용하는 정당한 이유가 있습니다. Ajaxian 응용 프로그램에서는 브라우저 기록을 관리하는 데 도움이됩니다.

IE를 포함한 모든 브라우저는 명명 된 앵커가 없으면 location.hash를 무시해야합니다. IE는 해당 ID 또는 NAME이있는 요소로 건너 뛰기를 좋아합니다. 그래서 당신은

<form id="login" ... 

또는

<div id="login"><form name="somethingElse"... 

<form name="login" ... 

또는

이있는 경우 기존의 해쉬 마크처럼 취급하고 아래로 뛰어 IE가 발생할 수 있습니다 그.

관련 문제