programing

AJAX 호출 시 다운로드 전에 window.on이 호출되지 않도록 할 수 있습니까?

bestprogram 2023. 9. 4. 20:27

AJAX 호출 시 다운로드 전에 window.on이 호출되지 않도록 할 수 있습니까?

저는 AJAX 기반의 그리드 컨트롤을 가지고 있습니다.

이벤트를 언로드하기 전에 window.on에 연결하여 저장되지 않은 데이터가 있는지 확인하고 저장된 데이터가 있는 경우 "이동하시겠습니까..."라는 메시지를 표시합니다.저장되지 않은 데이터가 있습니다..".

이 모든 것이 좋습니다.

그러나 AJAX 호출은 또한 다운로드하기 전에 window.on을 트리거하므로 그리드에 저장되지 않은 데이터가 있을 경우(예: 다른 그리드의 행 삭제) AJAX 호출을 수행하면 사용자에게 "이동하시겠습니까...저장되지 않은 데이터가 있습니다.좋지 않은 메시지입니다.

AJAX 호출에 대한 언로드 전 on 이벤트를 억제할 수 있습니까?아니면 통화가 AJAX 통화임을 감지할 수 있습니까?그렇지 않으면 해킹을 당해야 합니다!

감사해요.

하이퍼링크로 포스트백을 트리거하려면 간단한 해결 방법이 있습니다.대신에

<a href="javascript:submitFunction();">Submit</a>

또는

<a href="javascript:;" onclick="submitFunction();">Submit</a>

다음 코드를 사용하십시오.

<a href="#" onclick="submitFunction();">Submit</a>

하이퍼링크의 href-attribute의 내용이 현재 페이지(날카로운 문자가 나타내는)가 아닌 경우 IE는 on unload 이벤트를 발생시키는 것으로 보입니다.

저는 다음과 같은 일을 했습니다.

내부 본문 태그:

  var allowConfirm = true;

  window.onbeforeunload = confirmExit;
  function confirmExit()
  {
    if(allowConfirm)
        return "Are you sure you want to navigate away from this page?";
    else
        allowConfirm = true;
  }

로그아웃할 때 다음 스크립트를 호출합니다.

allowConfirm = false; window.location을 반환합니다.href;

정말 이상하네요, 당신의 Ajax 전화가 새 링크를 로드하지 않는 것이 확실한가요?

이 관련 사양을 읽어 보십시오. 사양을 다운로드하기 전에 확인하십시오.

Ajax 호출이 호출 테이블에 나열된 작업을 트리거할 수 있는지 확인합니다.

또는 , 을 후크 할 수 있습니다.즉: 포스트백 기능이 IE6 또 href 경 우 기 후 있 수 니 다 습 할 크 백 을 트 능 스 포 는 의 ▁the 니 다 ▁the 있 ▁in 즉: 포스트백 기능이WebForm_DoPostBackWithOptions사용하여 아래 를 위의 합니다.

var DoPostBackWithOptionsHook = null;

$(document).ready(function(){
  DoPostBackWithOptionsHook = WebForm_DoPostBackWithOptions;
  WebForm_DoPostBackWithOptions = WebForm_DoPostBackWithOptionsHook;
}

function WebForm_DoPostBackWithOptionsHook(options) {
    var navigateAwayFlag = $("input[id*='navigateAwayValue']");
       if (navigateAwayFlag.length > 0) {
           navigateAwayFlag[0].value = "false"; }

    return DoPostBackWithOptionsHook(options)
}

ASP를 말씀하시는 거라면.NET AJAX 부분 포스트백, 그리고 오늘도 똑같은 행동을 했습니다. (만약 그렇지 않다면, 제 게시물을 완전히 무시하세요.)

지금까지 제 경험으로는 입력에 의해 부분적인 포스트백이 트리거되면 부분적인 포스트백이 실행되는 동안 언로드되기 전에 시작되지 않지만 하이퍼링크에 의해 부분적인 포스트백이 트리거되면 실행됩니다.브라우저는 앵커 태그(IE 및 FireFox에서만 테스트되었지만 예)에서 아무 것이나 클릭하면 탐색 중이라고 가정하는 것 같습니다.

페이지에 특정 숨겨진 필드가 있는지 여부는 탐색 경고를 표시하는 것이 적절할 때 이미 클라이언트 측을 결정하기 위해 사용하고 있던 것이므로, 다운로드하기 전에 숨겨진 필드의 값에 대한 검사를 myon의 if 상태에 추가하여 매우 간단하게 이 문제를 해결할 수 있었습니다.그리고 PageRequestManager의 BeginRequest 및 EndRequest 처리기를 후크하여 값을 설정합니다.이렇게 하면 부분적인 포스트백 동안 경고가 효과적으로 비활성화됩니다.더 구체적으로 확인하고 싶은 것이 있다면 여기에 더 복잡한 논리를 추가할 수 있습니다.

여기 너무 단순화된 코드 샘플이 있습니다.(만약 내가 그것이 작동하지 않을 정도로 준비하고 검열했다면 미안하지만 그것은 당신에게 아이디어를 줄 것입니다.)

window.onbeforeunload = checkNavigateAway;

Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(onBeginRequest);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(onEndRequest);

function onBeginRequest(sender, args) {
    var navigateAwayFlag = $("input[id*='navigateAwayValue']");
    if (navigateAwayFlag.length > 0) {
        navigateAwayFlag[0].value = "false";
    }
}

function onEndRequest(sender, args) {
    var navigateAwayFlag = $("input[id*='navigateAwayValue']");
    if (navigateAwayFlag.length > 0) {
        navigateAwayFlag[0].value = "true";
    }
}

function checkNavigateAway() {
    var navigateAwayFlag = $("input[id*='navigateAwayValue']");
    if (navigateAwayFlag.length > 0 && navigateAwayFlag[0].value == "true")
    {
        return "Warning Text";
    }
}

편집: 나쁜 소식입니다.위의 내용은 IE6에서 작동하지 않는 것 같습니다.Firefox와는 다른 순서로 이벤트를 실행하는 것 같습니다. 따라서 AJAX가 Request를 시작하기 전에 언로드하기 전에 on before fired...언로드를 시작하기 전에 하이퍼링크 클릭을 통해 플래그 값을 변경하는 방법을 찾아야 할 수 있습니다.

이것은 실제로 효과가 있습니다.

 OnClientClick="eval(this.href);return false" 

이 문제에 대한 한 가지 해결 방법은 콜 제출입니다.jquery를 사용하는 하이퍼링크 태그의 클릭 이벤트에서 함수()를 수행하고 하이퍼링크에서 href 속성을 제거합니다.

불가능합니다. 브라우저의 새로 고침 버튼을 눌렀는지 확인할 수 있는 방법이 없습니다.

AJAX를 사용하지 않지만 저장되지 않은 변경 사항이 있는 페이지를 떠나는 것을 방지하기를 원했습니다.나는 navigAway를 포함한 대부분의 이전 제안을 시도했습니다.IE 8에서 작동하는 것이 없습니다. NavigAway는 항상 0을 반환했습니다.

태그에서 클래스를 ID로 사용한 후 이를 기반으로 부울을 설정하는 솔루션이 있는 블로그를 찾았습니다.제가 그렇게 해봤는데 안 돼서요.HTML이 출력할 때 NET은 클래스가 선언된 범위 태그로 입력 태그를 싸고 있었습니다.저의 최종 해결책은 태그의 ID 이름에 무시라는 단어를 넣는 것이었습니다.또한, 부울을 설정하는 코드에 의해 클릭이 갇히기 전에 언로드가 호출되는 것을 방지하려면 다음과 같은 방법을 사용해야 합니다.버튼 또는 asp:입력. 마지막으로 (VSIDE의) 시작 이름이 컨트롤 유형이 되도록 강제합니다. ID="Button_Save".또한 asp: 태그를 사용하면 언로드 전에 on이 두 번 호출되는 것을 방지할 수 있습니다.

<script type="text/javascript" language="javascript">
 var stuffchanged = false
 var ignorenavigate = false

  $(document).ready(function () {


    //Detect whether the event source has "nonavigate" class specified
    $("a,input,img,checkbox,button").click(function () {
        var str = $(this).attr("ID");
        ignorenavigate = str.search("Ignore") > 0;
    });

});

window.onbeforeunload = confirmExit;
function confirmExit() {
    if (stuffchanged && !ignorenavigate) {
        return "You have attempted to leave this page with unsaved changes.  If you have made any changes to the fields without " +
    "clicking the Save button, your changes will be lost.  Are you sure you want to exit this page?";
    }  

}

  function textchanged() {
     stuffchanged = true;
  }

언급URL : https://stackoverflow.com/questions/537702/can-i-prevent-window-onbeforeunload-from-being-called-when-doing-an-ajax-call