(与其他一些答案一样,这需要更改 JavaScript 的绑定方式。如果这对您不起作用,请忽略。)
我发现在 IE 7 到 IE 10 中,只需使用 jQuery .click()preventDefault
即可工作而不显示onbeforeunload
消息(IE 11 不会显示beforeunload
我的任何测试用例的消息)。无论 href 是 '#' 还是javascript:void(0)
. attachEvent
如果/addEventListener
直接使用,我希望结论成立,但我没有对此进行测试。
在http://jsbin.com/tatufehe/1有以下演示。两个版本(绿色)都可以preventDefault
工作(不显示beforeunload
对话框)。没有的preventDefault
确实显示了它(作为比较)。
$( document ).ready( function () {
$( 'a' ).click( function ( evt ) {
$( '#display' ).text( 'You clicked: ' + $( this ).text() );
if ( $(this).hasClass( 'withPreventDefault' ) ) {
evt.preventDefault();
}
} );
})
window.onbeforeunload = function () {
return "Are you sure you want to leave?";
};
<p id="display"></p>
<p><a class="withPreventDefault" href="#">Number sign link *with* preventDefault</a></p>
<p><a class="withPreventDefault" href="javascript:void(0);">JavaScript href link *with* preventDefault</a></p>
<p><a href="javascript:void(0);">JavaScript href link *without* preventDefault</a></p>