当前位置: 首页 > 知识库问答 >
问题:

JavaScript/jQuery回调混乱

能修谨
2023-03-14

我给出了一个模型以供确认:

<div class="modal" tabindex="-1" role="dialog" id="modal">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
             ... Body ...
            <div class="modal-footer">
                <button type="button" id="btnCancel" class="btn btn-default" data-dismiss="modal">Cancel</button>
                <button type="button" id="btnOk" class="btn btn-primary" data-dismiss="modal">Ok</button>
            </div>
        </div>
    </div>
</div>

下面是显示上述模式的代码。

var M = {
 confirm: function(body, yes, no) {
    $('#btnCancel').on('click', function() {
       $('#btnCancel').off();
       $('#confirm-modal').modal('hide');
       if (no) {
            return no();
       }
    });
    $('#btnOk').on('click', function() {
      $('#btnOk').off(); 
      $('#modal').modal('hide');
      if (yes) {
         return yes();
      }
    });
  }
}

下面是我如何使用它...(例如在任何视图中)

M.confirm("Body", function(){
   // Function Body
})

现在,问题是:如果我调用confirm,它显示模态。但是如果我单击Cancel,然后再次调用confirm(确认),这一次,我点击OK:函数(上面代码段中的第二个参数)被调用两次。如果我点击取消10次,上面的函数调用10次。

知道为什么会这样吗?

谢谢.

共有1个答案

赖星驰
2023-03-14

每次调用confirm时,都将一个事件处理程序添加到btncancelbtnok中。

但是,您只在单击其中一个按钮时删除该按钮上的效果处理程序。

因此,如果调用confirm,然后单击btncancel,然后调用confirm您将在btnok上有两个事件处理程序:一个来自对confirm的第一次调用,一个来自第二次调用。

单击任何一个按钮时,都需要删除这两个事件处理程序。

…或者只在加载文档时添加事件处理程序,之后不要再碰它们。

 类似资料:
  • 我试图理解一个API参考描述,但我很难理解它的含义: http://mongodb.github.io/node-mongodb-native/2.2/api/Cursor.html#toArray 上面写着 'toArray(回调)- 我知道回调相当于一个“块”,但有一个指向“promise”的箭头符号意味着什么?

  • 我在玩弄promise和回调,想知道如果没有回调被传递,写一个返回promise的函数的正确方法是什么。 我的结果看起来是这样的,但我不确定这是否正确(反模式的意思) 它很简单:创建一个函数,并将“工作”代码包装在一个promise中。如果没有回调传递给我的函数,我返回包装的promise。如果一个回调被传递,我从和 这样可以吗,还是我错过了一些不起作用的特殊情况?

  • 问题内容: 我在使用普通旧JavaScript(无框架)在回调函数中引用我的对象时遇到了一些麻烦。 现在,当我创建一个新对象时(在DOM加载后,使用span#test) onclick函数中的“ this”指向span#test而不是foo对象。 如何在onclick函数中获取对foo对象的引用? 问题答案: (提取了一些其他答案的注释中隐藏的解释) 问题在于以下几行: 在这里,您传递了一个函数对

  • 问题内容: 我已经看到很多类似问题的问题和解决方案,但对我来说没有任何效果。我有这个: 但这不起作用。为了澄清,我想将内容加载到中,然后返回的内容。但是,即使我已将其放入回调函数中,也似乎在加载内容之前返回了该内容。 问题答案:

  • 问题内容: 我在这里需要一些建议或一些解释。我有一个jquery ajax调用, 一切正常。我的回调响应正确触发。但是,我注意到的是,即使我的呼叫返回成功状态200,每次也会触发我的回调。在上面的回调中,我看到该对象是200。 谁能解释什么地方出了问题或这里发生了什么?回调应该仅在我有404或非200响应时触发。我的假设正确吗? 谢谢。 问题答案: 错误回调将在http错误时调用,但 如果响应上的

  • 问题内容: 我有这个ajax请求,可从服务器获取数据,并且默认情况下始终是。但是有时它会从服务器返回json,所以我想检查返回的数据是否为html,然后执行A,否则执行B。可能吗? 我的jQuery 当返回的数据为时,出现此错误, 语法错误:JSON.parse:意外字符 那么如何使此代码 通用 ? 问题答案: 我不确定是否有更好的方法,但是您可以尝试…