سؤال

أملك

<span class="cssButton"><a href="javascript:void(0);" class="buttonBlue" onclick="swfu.startUpload();"> <img src="http://uber-upload.com/img/icons/up_16.png" alt=""/> Uber-Upload! </a></span>

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

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

شكرًا!

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

المحلول

أضف هذا الإعلان إلى الصفحة:

var upcount = 0;

تغيير OnClick إلى:

onclick="++upcount; swfu.startUpload();"

إذا كان swfu يمنحك بعض الحدث عندما يتم تحميله، ووضع هذا على ذلك:

--upcount;

وأضف هذا المعالج:

window.onbeforeunload = function() {
    if (upcount > 0) {
        return "The upload is still in progress, leaving the page will cancel it.";
    }
}

حيث يحترم المتصفحات تحميل OnBeforeUnloy، الذي سيعمل. ومعظمهم يفعلون، معظم الوقت. حيث لا، حسنا، لقد حاولت. لاحظ أنه باستخدام عداد، فأنت تسمح بتحميلات متعددة.

قد تفكر في Attachevent (IE) أو AddEventListener (قياسي) (أو مكتبة مثل النموذج الأولي أو المسج الذي يضفي الاختلافات لك) لإرفاق الأحداث الخاصة بك بدلا من استخدام السمات. باستخدام سمات المعالجات (المعروفة AKA DOM0) أمر قديم إلى حد ما والحد قليلا (معالج واحد فقط لكل حدث لكل عنصر). لكنها لا تزال تعمل.

نصائح أخرى

function warnUser()
{
   if(dataIsDirty)
   {
      return "You have made changes. They will be lost if you continue.";
   }
   else
   {
      // Reset the flag to its default value.
      dataIsDirty = false;
   }
}

function isDirty()
{
   dataIsDirty = true;
}

function isClean()
{
    dataIsDirty = false;
}

ثم تستخدمه تماما مثل onbeforeunload حدث.

window.onbeforeunload = warnUser;
dataIsDirty = false; //Or true, depending on if you want it to show up even if they dont' make changes)

ثم لاستخدامها، ما عليك سوى استخدام وظيفة "Isclean" إلى أي شيء لا تريد تشغيله (احفظ، على سبيل المثال)، أو يمكنك إرفاق "ISDirty" بأي حال من الأحداث التي تريد أن تؤديها قبل مغادرتها (قل ذلك، تحرير حقل النموذج).

الاعتماد على OnBeforeunload هو Sketchy في أحسن الأحوال. نظرا لأن مرسلي البريد العشوائي قد أساءوا السلوك بنفس الطريقة التي تشير إليها، فقد تمت إزالة القدرة على القيام بذلك بشكل أساسي.

يمكنك الآن الاستجابة فقط للاطلاع على OneBeforeunload إذا تم إطلاق الحدث الوثيق من تنشيط زر أو من هذا القبيل.

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