كيفية إيقاف وظيفة في JavaScript حتى يتم استيفاء حالة ، ليس حتى يتم تعيين حد محدد بالميلي ثانية!

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

سؤال

هذا أمر عاجل ولم أتمكن من العثور على حل له. المشكلة على النحو التالي:

أقوم بتصميم تطبيق ويب ، يرسل أوامر متعددة إلى آلات متعددة. الآن بعض الأوامر التي أتطلبها إدخالًا إضافيًا. لقد صممت نافذة منبثقة في jQuery تطلب من المستخدم إضافة هذه الإدخال الإضافي. تكمن المشكلة في الحلق في جميع الأوامر فقط نافذة للأمر الذي تم اختياره الأخير ... هذا لأنه لا يتوقف مؤقتًا أثناء إدخال المستخدم للمدخلات قبل الذهاب إلى أمر آخر.

كيف يمكنني إيقاف وظيفة من مواصلة تنفيذها في JavaScript/jQuery؟

مثال في الرمز الكاذب:

loop each command
{
  for selected command popup windows;
  // pause until user finishes input then go to
  // next line where any function is processed

  function(); //then loop again--> pause --> when user finishes continue to function() etc..

}

Thx لمساعدتك وصبرك ، جربت جميع أنواع الأساليب دون أي نتيجة. قون

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

المحلول

إذا فهمت لك بشكل صحيح ، أعتقد أنه يجب عليك تشغيل النافذة باستخدام Window.ShowModaldialog () بدلاً من Window.Open ().
سوف يحتفظ بالتنفيذ حتى يتم إغلاق الحوار.

طريقة بديلة هي استخدام وظيفة رد الاتصال.

نصائح أخرى

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

var userValue = prompt("Ask your question");

نرى مثال هنا. انتظر بعض الوقت قبل إدخال قيمة أو إلغاء ، ولاحظ الطابع الزمني.

يتم ذلك عادة باستخدام وظائف رد الاتصال. نظرًا لأنك تستخدم jQuery بالفعل ، فقد تجد شيئًا مثل مرتجلة البرنامج المساعد مفيد. يتيح لك القيام بمطالبات مشروطة مع عمليات الاسترجاعات.

شيء مثل (جزئيًا على سبيل المثال 9 من الرابط أعلاه). لقد نشرت هذا باعتباره عرضًا تجريبيًا في http://jsfiddle.net/28d3c/2/ .

var ind = 0;
var values = [];

var count = 3;

function nextPrompt(done)
{
     function processPrompt(v, m, f)
     {
          if(v != undefined)
          {
            var input = f.alertName;
            values[ind] = input;
          }
          if(++ind < count)
          {
            nextPrompt(done);
          }
          else
          {
            done();
          }
    }

    var txt = 'Please enter value ' + ind + ':  <br /><input type="text" id="alertName" name="alertName" value="name here" />';    
    $.prompt(txt,{
            callback: processPrompt,
            buttons: { Hey: 'Hello', Bye: 'Good Bye' }
    });
}

nextPrompt(function()
{
    for(var i = 0; i < count; i++)
    {
      alert(values[i]);   
    }
});

الجواب المختصر هو أنه لا يمكنك "إيقاف" تنفيذ JavaScript. يمكنك أن تفعل شيئًا كهذا إذا كان يحاكي توقفًا جيدًا بما يكفي لأغراضك ، لكنه ليس نفس الشيء.

var answer;

var myInterval = setInterval(function () {
  if (answer != undefined) {
    clearInterval(myInterval);
    // processing code
  }
}, 1000);

answer = prompt("Please enter your name.");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top