Twitter bootstrap Twitter引导模式多事件触发

Twitter bootstrap Twitter引导模式多事件触发,twitter-bootstrap,Twitter Bootstrap,这是一个奇怪的问题,我已经寻找了一个答案,但我找不到一个适合我的代码 编辑:这个问题发生在一个繁重的Ajax页面上,页面没有刷新,模式被重用 请注意,我的Javascript有点弱,所以我可能在处理这个问题时出错了 我发现了类似的问题和问题 两者都描述了我遇到的问题,但我只是更新了hidden上的调用视图。我不绑定到按钮事件 我定义了多个情态动词 <div id="modal_small" class="modal hide fade in"> </div>

这是一个奇怪的问题,我已经寻找了一个答案,但我找不到一个适合我的代码

编辑:这个问题发生在一个繁重的Ajax页面上,页面没有刷新,模式被重用

请注意,我的Javascript有点弱,所以我可能在处理这个问题时出错了

我发现了类似的问题和问题

两者都描述了我遇到的问题,但我只是更新了hidden上的调用视图。我不绑定到按钮事件

我定义了多个情态动词

    <div id="modal_small" class="modal hide fade in">
    </div>
    <div id="modal_large" class="modal hide fade in">
    </div>
我的目标是重用这些模态。我相信这就是问题所在

在要显示模态的视图的$document.ready中,我调用此脚本绑定到模态“hidden”事件

    $('#modal_large').on('hidden', function () {
               // Make Ajax Call - THIS WORKS
    });
      function show_modal_large(href, callback) {
             // create guid to name of this Modal
             var randomNum = guid();
             // create element with guid id
             var elementName = '#' + randomNum.toString();
             $('body').append("<div id=" + randomNum + " class='modal hide fade in'></div>");
             // create Modal and show
             $.get(href, function (data) {
                 $(elementName).html(data);
                 // register call back to 'hidden' event
                 $(elementName).on('hidden', function () {
                     callback();
                     // clean up after hidden
                     $(elementName).unbind();
                     $(elementName).remove();
                 });
                 $(elementName).modal('show');
             });
         };

         function s4() {
             return Math.floor((1 + Math.random()) * 0x10000)
                        .toString(16)
                        .substring(1);
         };

         function guid() {
             return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
                    s4() + '-' + s4() + s4() + s4();
         }
因此,在视图上有一个列表,显示选定的图像。然后打开一个模式并选择更多图像。在隐藏时,我更新调用窗体上选定的图像

一切正常

问题是:

第一次打开并关闭模式时,会触发一次“on hidden”事件。第二次打开和关闭模式时,“打开隐藏”事件是两次调用,第三次是三次调用,依此类推。 如果我对其他具有不同“隐藏”事件的事件使用模式,则隐藏事件会对新隐藏事件调用四次,对旧隐藏事件调用四次。过了一会儿,我的系统就因为所有的ajax调用而死掉了


我错过什么了吗?我应该如何构造代码以避免这种情况发生?

好的,我已经解决了这个问题。。。嗯,有点。希望这段代码对其他人有用

当我绑定到模态的“隐藏”事件时,每次创建它时,我只是添加另一个绑定,并对之前的所有绑定进行另一次调用

为了解决这个问题,我去掉了旧的模态声明

<div id="modal_small" class="modal hide fade in">
</div>
<div id="modal_large" class="modal hide fade in">
</div>
而不是它们,我动态地创建模态,因为我需要它们,就像这样,并为“隐藏”事件传入回调

    $('#modal_large').on('hidden', function () {
               // Make Ajax Call - THIS WORKS
    });
      function show_modal_large(href, callback) {
             // create guid to name of this Modal
             var randomNum = guid();
             // create element with guid id
             var elementName = '#' + randomNum.toString();
             $('body').append("<div id=" + randomNum + " class='modal hide fade in'></div>");
             // create Modal and show
             $.get(href, function (data) {
                 $(elementName).html(data);
                 // register call back to 'hidden' event
                 $(elementName).on('hidden', function () {
                     callback();
                     // clean up after hidden
                     $(elementName).unbind();
                     $(elementName).remove();
                 });
                 $(elementName).modal('show');
             });
         };

         function s4() {
             return Math.floor((1 + Math.random()) * 0x10000)
                        .toString(16)
                        .substring(1);
         };

         function guid() {
             return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
                    s4() + '-' + s4() + s4() + s4();
         }
我从中获得Guid创建


这对我很有用。并且解决了我的问题。

您也可以使用.one而不是.on,并且您绑定的事件将只触发一次。

在上述实例中,一个将无法工作,因为我实际上需要能够多次调用该事件