2015-02-20 13 views
8

Tôi muốn thực thi chức năng trước khi rời khỏi trang mà không hiển thị cửa sổ bật lên xác nhận chỉ với Javascript. Tôi đã thử với các mã dưới đây nhưng nó đã không làm việc hoặc với onbeforeunload nhưng nó luôn luôn cho thấy popup.Cách gọi hàm trước khi rời trang bằng Javascript

var result = 'test'; 

if(window.onbeforeunload == true) 
{ 
    result = 'test1'; 
    alertmess(); 
} 

function alertmess() { 
    alert(result); 
} 

//window.onbeforeunload = function() { 
// return result; 
//} 
+1

Câu trả lời ngắn gọn là bạn không thể làm điều này. Sự kiện 'onbeforeunload' chỉ có thể * * được sử dụng để kích hoạt popup, nó không thể được sử dụng cho bất cứ thứ gì khác. Lựa chọn duy nhất của bạn cho một cái gì đó như thế này là đính kèm một sự kiện vào mọi liên kết ngoài trên trang của bạn. Tuy nhiên, không có cách nào để trực tiếp nắm bắt một sự kiện cho người nào đó để lại thông qua các phương tiện khác (nhập thủ công url, đóng tab, v.v.). –

+0

kiểm tra điều này http://stackoverflow.com/questions/17975068/calling-js-functions-on-browser-tab-close –

+0

Tôi đang tìm cách có thể kích hoạt bất kỳ chức năng nào khi người dùng đang trên đường tới tải trang mới hoặc thoát khỏi trang hiện tại. –

Trả lời

22

Bạn luôn có thể gọi chức năng của bạn trước khi rời khỏi trang.

function myfun(){ 
    // Write your business logic here 
    console.log('hello'); 
} 

onbeforeunload:

window.onbeforeunload = function(){ 
    myfun(); 
    return 'Are you sure you want to leave?'; 
}; 

Hoặc với jQuery:

$(window).bind('beforeunload', function(){ 
    myfun(); 
    return 'Are you sure you want to leave?'; 
}); 

này chỉ sẽ hỏi người dùng nếu họ muốn rời khỏi trang hay không, bạn không thể chuyển hướng họ nếu họ chọn để ở lại trên trang. Nếu họ chọn rời khỏi, trình duyệt sẽ chuyển đến nơi họ yêu cầu.

Bạn có thể sử dụng onunload để làm công cụ trước khi trang được bốc dỡ, nhưng bạn không thể chuyển hướng từ đó (khối Chrome 14 + cảnh báo bên onunload):

window.onunload = function() { 
    myfun(); 
    alert('Bye.'); 
} 

Hoặc với jQuery:

$(window).unload(function(){ 
    myfun(); 
    alert('Bye.'); 
}); 
+1

Giải thích rất tốt! –

+1

Tuyệt vời. Cảm ơn bạn đã viết mã. Nó làm việc với hàm 'myfun()'. Có cách nào để vô hiệu hóa popup xác nhận hoặc sử dụng 'alert()' thay vì đó? –

+1

Ok, trong trường hợp đó, hãy viết cảnh báo (''); trong myfun cuối cùng, điều này sẽ cung cấp cho bạn một lỗi trong js "NS_ERROR_NOT_AVAILABLE:" và xác nhận popup sẽ không xuất hiện, mặc dù đó là cách sai để làm điều đó nhưng cũng sẽ làm như vậy ;-) –

0

Điều bạn đang làm chắc chắn sẽ không thực hiện được. So sánh window.onbeforeunload đến true tại một số thời điểm tùy ý thậm chí không có ý nghĩa.

Có gì với mã nhận xét ở cuối? Nếu bất cứ điều gì, bạn cần phải gán một chức năng để onbeforeunload:

var result = 'test'; 

window.onbeforeunload = function() { 
    result = 'test1'; 
    alertmess(); 
} 

function alertmess() { 
    alert(result); 
} 

Tuy nhiên, ở trên chỉ xuất hiện để làm việc trong IE. Vui lòng xem nhận xét của @ Bulk và câu trả lời của @Brandon Gano.

+1

Tôi đã thử với mã của bạn bằng FF và Chrome. Tuy nhiên, không có gì xảy ra. –

+2

@ PMay1903 Vâng, đó là lý do tại sao tôi nói "Tuy nhiên, ở trên chỉ xuất hiện để làm việc trong IE." – JLRishe

0

Nếu bạn muốn nhắc người dùng, hãy trả về một chuỗi có thư. Nếu bạn không muốn nhắc người dùng, đừng trả lại bất cứ điều gì.

// Execute code, then prompt the user to stay 
window.onbeforeunload = function() { 
    // This will happen before leaving the page 
    return 'Are you sure you want to leave?'; 
} 

Hoặc:

// Execute code, then leave 
window.onbeforeunload = function() { 
    // This will happen before leaving the page 
} 
+0

'window.onbeforeunload = function() { \t \t cảnh báo (kết quả); \t // Điều này sẽ xảy ra trước khi rời khỏi trang \t trả về false; \t} 'Tôi đã thử với alert() trước khi' return false; 'như suy nghĩ của tôi, nhưng nó không hoạt động. –

+0

Trình duyệt không cho phép bạn sử dụng 'alert' trong trình xử lý này. Cách duy nhất để hiển thị một tin nhắn là trả lại nó như là một chuỗi cung cấp cho người dùng sự lựa chọn để ở lại hoặc rời khỏi. –

+0

Điều đó nói rằng, tôi đã thực hiện chỉnh sửa cho câu trả lời của tôi, vì 'return false' cũng sẽ nhắc người dùng. –

-1

Đây là một ví dụ về cách bạn có thể xử lý các điều hướng đi. Lưu ý cách div xuất hiện một chút trước khi điều hướng xảy ra.

window.onbeforeunload = function() 
 
{ 
 
    $("#oi").append($('<div>This is the child DIV</div>')); 
 
    
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="theMainDiv"> 
 
    The Main Div will receive another div before leaving the page 
 
</div> 
 

 
<button onclick="window.location.href='pageAway'">Navigate Away</button>

+0

Mã nằm trên phần HTML. Hãy thử kiểm tra nó trong phần JS. – ClayKaboom

1

Chỉ cần gọi chức năng của bạn từ trong phạm vi window.onbeforeunload. Lưu ý, một số trình duyệt hạn chế những gì bạn có thể làm ở đây (ví dụ: không có chuyển hướng hoặc cảnh báo). Xem: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload để biết thêm thông tin.

Tôi cũng đã thêm mã thích hợp cho người đọc rằng làm muốn hiển thị hộp thoại xác nhận.

function doSomething(){ 
    //do some stuff here. eg: 
    document.getElementById("test").innerHTML="Goodbye!"; 
} 
function showADialog(e){ 
    var confirmationMessage = 'Your message here'; 
    //some of the older browsers require you to set the return value of the event 
    (e || window.event).returnValue = confirmationMessage;  // Gecko and Trident 
    return confirmationMessage;        // Gecko and WebKit 
} 
window.addEventListener("beforeunload", function (e) { 
    //To do something (Remember, redirects or alerts are blocked here by most browsers): 
    doSomething();  
    //To show a dialog (uncomment to test): 
    //return showADialog(e); 
}); 

Chỉ cần nhấn 'Run' để kiểm tra: http://jsfiddle.net/2Lv4pa9p/1/

+0

@downvoter - phản hồi có thể hữu ích, ta;) – Moob

+0

Cảm ơn bạn vì điều đó. Nó hoạt động như mẫu của bạn. Tuy nhiên, nó không hoạt động như mong muốn của tôi. 1+ với điều đó. –

0

Các tài liệu ở đây khuyến khích nghe sự kiện onbeforeunload và/hoặc thêm một người biết lắng nghe sự kiện trên cửa sổ.

window.addEventListener('onbeforeunload', function(e) {}, false); 

Bạn cũng có thể chỉ cư trú trong .onunload hoặc .onbeforeunload thuộc tính của window với một chức năng hoặc một tham chiếu chức năng.

Mặc dù hành vi không được chuẩn hóa trên các trình duyệt, nhưng hàm này có thể trả về một giá trị mà trình duyệt sẽ hiển thị khi xác nhận có rời khỏi trang hay không.

0

Vui lòng thử bên dưới mã đơn giản -

Jquery Mã Ví dụ -

$(window).bind('beforeunload', function(){ 
    Func_ToInsert_Record(); 
    Alert('Thanks And Bye!'); 
}); 

Javascript Mã Ví dụ -

// Anonymous function 
window.onbeforeunload = function(event) { 
    var message = ''; 
    if (window.event) { 
    console.log(window.event); 
    console.log(event.currentTarget.performance); 
    console.log(event.currentTarget.performance.navigation); 
    console.log(event.currentTarget.performance.navigation.type); 

    } 

    event = event || window.event; 
    event.preventDefault = true; 
    event.cancelBubble = true; 
    event.returnValue = message; 
} 
0

tôi đơn giản đặt mã này và các công trình Preety cũng

window.onbeforeunload = function(event) { 
    $('element').show(); 
    return; 
}; 
Các vấn đề liên quan