0

사용자가 탭 또는 브라우저 창을 닫을 때만 OnBeforePageUnload를 트리거하려고합니다. 사용자가 내 웹 사이트를 탐색 할 때 사용자가 입력 한 데이터를 잃지 않도록 경고 대화 상자를 트리거하는 사용자 지정 메커니즘이 있습니다.html 앵커 요소에 대해 jquery 클릭 이벤트가 발생하기 전에 리디렉션이 발생하는 이유는 무엇입니까?

$('a[href]').click(function (event) { 
    buttonOutsidePageClicked = false; 
}); 

그런 다음 onbeforepageunload 이벤트가 트리거 : 그래서 내 페이지의 링크를 클릭했습니다 때마다, 나는 플래그를 설정합니다.

<a id="cpm_UploadLink" class="button" rel="no" href="/pages/otherPage"> 
    <span class="btnLeft"></span> 
    <span class="btnMiddle">Click Me</span> 
    <span class="btnRight"></span> 
</a> 
: 한 다음

function OnBeforeUnload(oEvent) { 
if (buttonOutsidePageClicked) 
    return navAwayMessage; 
} 

이를 제외하고는 페이지 내 모든 링크에 대해 잘 작동 : 나는이 (가)입니다 onbeforeunload 대화에 내장 여부를 표시해야합니다 있는지 확인하기 위해 플래그의 값을 확인

이 html은 사용자 정의 웹 컨트롤에 의해 생성됩니다. 링크를 클릭하면 클릭 이벤트없이 다른 페이지로 리디렉션됩니다. 그래서 플래그를 설정할 수없고 onbeforeunload 메시지가 내장되어 있습니다.

나는 인라인이 같은 컨트롤에 직접 온 클릭 속성을 추가 추가 할 때 :

<a id="cpm_UploadLink" class="button" rel="no" href="/pages/otherPage" 
    onclick="javascript:buttonOutsidePageClicked = false;"> 
     <span class="btnLeft"></span> 
     <span class="btnMiddle">Click Me</span> 
     <span class="btnRight"></span> 
</a> 

모든 것이 잘 작동합니다. 그러나 이것이 내가 이것을 해결하려는 방법이 아닙니다.

누군가 내가 여기에서 만들고있는 실수를 설명 할 수 있습니까?

저는 많은 코드를 찾고 있지만 성공하지 못했습니다.

이 게시물을 찾았습니다. Preventing Links before jQuery is Loaded 하지만이 링크가 하나뿐이기 때문에 내 문제와 관련이 있는지는 잘 모릅니다.

미리 도움을 청하십시오. 모든

답변

3

html이 맞춤 웹 컨트롤로 작성되었으므로 JQuery 1.7 이상에서 클릭 이벤트를 바인딩하려면 live() 또는 on()을 사용해야 할 수 있습니다. 예를 들어

:

$("body").delegate("a","click", function() { 
     buttonOutsidePageClicked = false; 
    }); 

JQuery와 버전 1.7 사용이 :

$("body").on("click", "a", function() { 
    buttonOutsidePageClicked = false; 
}); 

JQuery와 live()

보기 here

+0

클릭 이벤트가 발생하지 않으므로이 기능이 작동하지 않습니다. 아니면 당신이 대답하는 것을 그리워합니까? 라이브 메소드는 무엇을합니까? $ ("a")와 다른가요? click (function() {...}); ? – ThdK

+0

"현재 선택자와 현재 및 미래에 일치하는 모든 요소에 대한 이벤트 처리기를 연결하십시오." jquery가로드 된 후 다른 js가 html 요소를 만들 때 live를 사용해야합니다. 귀하의 경우, 사용자 정의 웹 컨트롤이 js를 통해 요소를 작성하는지 확신 할 수 없습니까? 이벤트가 트리거되지 않는다고 말하면 이벤트가 DOM 요소에 영향을 미치지 않는다는 것을 의미합니다. –

+1

@ThdK - 코드를 이해하지 못한다면 작동하지 않을 것이라고 말하지 마십시오. 이제 요소가 페이지에서 제거/추가 되더라도 '라이브 바인딩'이 작동하므로 실제로 문제가 해결 될 수 있습니다. – Dementic

0

첫째 : 당신이 당신의 코드를 리팩토링 할 수

$('a[href]').click(function (event) { 
    buttonOutsidePageClicked = false; 
}); 

당신의 대답은 아마있다 :

이 HTML은 사용자 정의 웹 컨트롤에 의해 생성된다

그들은 jQuery 클릭 핸들러가 호출되지 않도록 click 이벤트를 하이재킹하거나 <span> 엘리먼트의 click 이벤트를 사용합니다.

방화 광 또는 크롬 개발자 도구를 사용하여 모든 이벤트 수신기를 볼 수 있습니다. 그 중 하나가 jQuery인지 확인하십시오.

+0

가 아, 네 말이 맞아 온라인 예. 이것은 다른 코드를 시도해 보았을 때 남다른 반응을 보이는 지 아닌지를 보여줍니다. 내 질문에 그것을 업데이 트했습니다. 어떻게하면 모든 이벤트 리스너를 방화범이 끌리는 소리로 볼 수 있습니까? – ThdK

+0

DOM 패널 : http://getfirebug.com/wiki/index.php/DOM_Panel – jgauffin

+0

내 링크를 선택하고 DOM 패널을 열면 다음과 같이 표시됩니다. \t click() 클릭하면 의미가 있는지 알 수 없습니다. – ThdK