2015-12-02 27 views
1

首先,我在我的應用程序上使用了window.onbeforeunload。它在頁面上工作,但是當點擊錨鏈接時,它應該被禁用<a href="abc.com">Click</a>。有任何想法嗎?請分享。我的代碼是低於它不工作:如何從<a>標記禁用window.onbeforeunload?

var submitFormOkay = false; 
window.onbeforeunload = function() { 
    if (!submitFormOkay) { 
     return "Don't delay your Success. Get FREE career counselling session. Fill in the details below"; 
    } else { 
     submitFormOkay = ''; 
    } 
} 

<a class="navbar-brand" href="http://www.google.com">Click</a> 
+0

你可以的onclick功能,您可以禁用它 – coder771

回答

1

你可以在document.body附加一個全球性的點擊處理程序,如果通過a元素通過點擊,將submitFormOkaytrue(或者你可以使用另一個變量繞過檢查,或者只是通過分配nullwindow.onbeforeunload清除處理程序),例如:

$(document.body).on("click", "a", function() { 
    submitFormOkay = true; // Or set another flag you'll check, 
          // or clear onbeforeunload entirely 
}); 

沒有jQuery的(因爲我錯過了jquery TA摹初期):

document.body.addEventListener("click", function(e) { 
    var element; 
    for (element = e.target; element != document.body; element = element.parentNode) { 
     if (element.tagName.toUpperCase() === "A") { 
      submitFormOkay = true; // Or set another flag you'll check, 
            // or clear onbeforeunload entirely 
      break; 
     } 
    } 
}, false); 
+1

Downvoter:這是怎麼回事「沒有用」? –

+0

爲什麼要循環瀏覽文檔中的每個元素?難道你沒有這個開銷嗎?根據每個點擊事件的'code',它遍歷所有元素並檢查元素是否爲'anchor'。 – Mayank

+1

@Mayank:我**沒有**循環遍歷文檔上的每個元素。當點擊發生時,當它到達'body'時,上面的內容將查看按z順序遍歷的元素(通常很少,甚至10個深度將是不尋常的 - 但是1000個深度仍然不是一個問題)。假設你有另一個div的div與另一個div的跨度和跨度的段落。你點擊em。它看着em,span,段落,div,div,div - 然後停在body上。微不足道的,尤其是以響應諸如點擊的用戶動作。 –

-2

使用jQuery可以遵循:

var submitFormOkay = false; 
$(window).on('beforeunload',function() { 
    if (!submitFormOkay) {`enter code here` 
     return "Don't delay your Success. Get FREE career counselling session. Fill in the details below"; 
    } else { 
     submitFormOkay = ''; 
    } 
}) 

<a class="navbar-brand" href="http://www.google.com">Click</a> 
$('a').on('click',function(e){ 
    e.preventDefault(); 
    $(window).off('beforeunload'); 
    window.location = $(this).attr('href'); 
});