التأكيد على جافا سكريبت () مع الحفاظ على رد الاتصال

StackOverflow https://stackoverflow.com/questions/3886228

سؤال


إلى هذه النقطة ، أريد تجاوز JS القياسية confirm() وظيفة داخل مكون الإضافي jQuery. لقد اكتشفت كيفية القيام بذلك مع تخطيط الوظيفة البسيطة أدناه.

function confirm(opts) {
   //code
}

الآن ، ما أريد القيام به هو استدعاء وظيفة أخرى داخل confirm وظيفة أعلاه ، مثل هكذا ...

function confirm(opts) {
   openModal(opts);
}

ال openModal ستقوم الوظيفة بفتح نافذة مشروطة مخصصة مع الرسالة والأزرار المطلوبة. الأزرار كلاهما <span> مع ال id لأحد الامرين submit أو cancel. submit يعود صحيح و cancel يعود خطأ. ولكن الآن ، كيف أعود إما صحيحًا أو خطأ بناءً على الزر الذي تم النقر عليه؟

فمثلا...

$('#openModal').live('click', function() {
   var opts = { title:'Modal Title', message:'This is a modal!' };
   var resp = confirm(opts);
   if(resp) 
      // user clicked <span id="submit"></span>
   else 
      // user clicked <span id="cancel"></span>
});

آمل أن تفهم ما أعنيه.

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

المحلول

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

if(confirm("Are you sure you want to submit this form?")) {
    form.submit();
}

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

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

نظرًا لأن JavaScript يتعامل مع هذا الزر ينقر بشكل مقدم (أي باستخدام وظائف رد الاتصال للتعامل مع الأحداث) بدلاً من التزامن ، فإن النهج الذي تحاوله لن يعمل.

ستحتاج إلى تغيير جميع أجزاء الكود التي تستخدم وظيفة التأكيد لتبدو مثل هذا:

confirm("Are you sure you want to submit this form?", function(result) {
    if(result) {
        form.submit();
    }
});

هذا من شأنه أن يعمل مثلما يسجل معالج الأحداث مع jQuery نفسه. يستمر تنفيذ البرنامج النصي على الفور ، وتخطي جميع التعليمات البرمجية في الوظيفة المجهولة. في وقت لاحق ، سيتصل المستعرض بهذه الوظيفة بشكل غير مباشر من خلال معالج أحداث JavaScript الذي تقوم بتسجيله ضمن وظيفة التأكيد ، والغرض منه الاتصال بوظيفة رد الاتصال بأي منهما true أو false حسب الاقتضاء.

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