【问题标题】:Call a function F2 inside function F1. Based on F2 return value continue F1 execution在函数 F1 中调用函数 F2。根据F2返回值继续F1执行
【发布时间】:2017-01-25 09:43:36
【问题描述】:

我想在函数中调用模态。并根据点击模式的内容,我想继续我的功能。

我知道这可以通过不同的承诺或回调来完成。但我不明白该怎么做

我的功能是

$(".delete").click(function(){


/// call a modal
     $(".confirm").modal();


    /*
     now if clicked yes in modal 
      then continue with my ajax call
     else return false
    */


});

我期待一个延迟的承诺或回调答案。因为我想知道它们在这种情况下是如何工作的

【问题讨论】:

    标签: javascript jquery callback promise bootstrap-modal


    【解决方案1】:

    下面是如何使用自己的 deferred:

    var deferred = $.Deferred();
    $(".confirm").dialog({
            modal: true,
            buttons: {
                Yes: function () {
                    // Ajax call 
                    deferred.resolve("yes");
                },
                No: function () {
                    deferred.resolve("No");
                }
            }
    });
    
    deferred.done(function(value) {
        $(".confirm").dialog('close');
        alert(value);
    });
    

    https://jsfiddle.net/mjwava8n/

    亲切的问候

    【讨论】:

      【解决方案2】:

      试试这个

      $(".confirm").dialog({
                  modal: true,
                  buttons: {
                      Yes: function () {
                          // Ajax call 
                          $(this).dialog("close");
                      },
                      No: function () {
                          $(this).dialog("close");
                      }
                  },
                  close: function (event, ui) {
                      $(this).remove();
                  }
      });
      

      编辑:这是一个带有“回调”的版本(不想添加新答案,因为这包括基础知识,只是稍微重构):

      function modalwithcallbacks(selector, yes, no, close)
      {
          $(selector).dialog({    
              modal: true,
              buttons: {
                  Yes: yes,
                  No: no,
              },
              close: close
          });
      }
      
      modalwithcallbacks(
          ".confirm", 
          function () { alert("yes"); $(this).dialog("close"); },
          function () { alert("no"); $(this).dialog("close"); }
          function () { $(this).remove(); }
      );
      

      下一步是将其设为$.fn. 以删除选择器部分或直接在方法中添加对话框。

      您可以选择将哪些操作作为回调(例如“是”)并保持关闭/否内联,给出:

      $(".delete").click(function() {
          modalwithcallbacks(".confirm", function() {
              // yes clicked, continue with ajax call
          });
      });
      

      【讨论】:

      • 这不符合我的模态设计。这就是我期望不同的承诺或回调答案的原因
      • Modals 不是 ajax - 他们没有承诺。此答案包含“回调”,但已内联。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 2019-07-22
      • 2017-01-07
      • 1970-01-01
      • 2021-05-20
      相关资源
      最近更新 更多