سؤال

هل من الممكن إنشاء مربع تأكيد مخصص لحدث OnBeforeunload في متصفح؟ حاولت ولكن بعد ذلك أحصل على 2 صندوق تأكيد (واحد مني وهو شيء أكثر من العودة تأكيد ... ثم معيار واحد من المتصفح).

في الوقت الحالي يبدو رمزي:

var inputChanged = false;

$(window).load(function() {
    window.onbeforeunload = navigateAway;
    $(':input').bind('change', function() { inputChanged = true; });
});

function navigateAway(){
    if(inputChanged){
        return 'Are you sure you want to navigate away?';
    }
}

أنا أستخدم jquery لهذا.

هل كانت مفيدة؟

المحلول

window.onbeforeunload = function (e) {
  var message = "Your confirmation message goes here.",
  e = e || window.event;
  // For IE and Firefox
  if (e) {
    e.returnValue = message;
  }

  // For Safari
  return message;
};

يرجى ملاحظة: ضع معظم المتصفحات هذه الرسالة بعد بعض النص الآخر. ليس لديك سيطرة كاملة على محتوى مربع حوار التأكيد.

نصائح أخرى

لا، لا يمكنك تجنب المعيار واحد من المتصفح. كل ما يمكنك فعله هو حقن بعض النص المخصص في ذلك؛ إذا كنت تستخدم معالج الأحداث التالية (مسجلة طريقة Prototype Lib):

Event.observe(window, "beforeunload", function(event) {
    if (showMyBeforeUnloadConfirmation)
        event.returnValue = "foo bar baz";
});

showMyBeforeUnloadConfirmation صحيح) ستحصل على تأكيد المتصفح القياسي بالنص التالي:

هل أنت متأكد من أنك تريد التنقل بعيدا عن هذه الصفحة؟

فو بار باز

اضغط موافق للمتابعة، أو إلغاء للبقاء على الصفحة الحالية.

حسنا] [إلغاء

واجهت نفس المشكلة، كنت قادرا على الحصول على مربع الحوار الخاص بها مع رسالتي، لكن المشاكل التي واجهتها كانت:

  1. كان يقدم رسالة على جميع الملاعب وأردت ذلك فقط بنقرة إغلاق.
  2. مع رسالتي التأكيد الخاصة بي إذا حدد المستخدم "إلغاء"، فإنه لا يزال يعرض مربع الحوار الافتراضي للمتصفح.

فيما يلي رمز الحلول التي وجدتها، والتي كتبتها على صفحتي الرئيسية.

function closeMe(evt) {
    if (typeof evt == 'undefined') {
        evt = window.event;
    }
    if (evt && evt.clientX >= (window.event.screenX - 150) && evt.clientY >= -150 && evt.clientY <= 0) {
        return "Do you want to log out of your current session?";
    }
}

window.onbeforeunload = closeMe;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top