2

WebアプリケーションにTwitterブートストラップフレームワークを使用する。私は別のモーダルを呼び出し、他のモーダルの上に1つのモーダルがあるモーダルを使用しています。現在、閉じる「x」ボタンをクリックすると、両方のモーダルウィンドウが閉じます。トップモーダルを閉じたいだけです。

Modalクラスの定義は、bootstrap.jsの750行目から始まります。

モーダルHTML

<div class="modal fade hide modal-creator" id="myModal_crop_image" style="display: none;height:600px;" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" data-target="#myModal_crop_image">×</button>
        <h3>Create New Gallery</h3>
    </div>
    <div class="modal-body">
        <img style="height:50%;" src="<?php echo base_url(); ?>data/001/images/album/014.jpg" alt="" />
    </div><!-- /modal-body -->

    <div class="modal-footer">

</div>

BootStrap JS

!function ($) {

  "use strict"; // jshint ;_;


 /* MODAL CLASS DEFINITION
  * ====================== */

  var Modal = function (element, options) {
    this.options = options
    this.$element = $(element)
      .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
    this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
  }

  Modal.prototype = {

      constructor: Modal

    , toggle: function () {
        return this[!this.isShown ? 'show' : 'hide']()
      }

    , show: function () {
        var that = this
          , e = $.Event('show')

        this.$element.trigger(e)

        if (this.isShown || e.isDefaultPrevented()) return

        $('body').addClass('modal-open')

        this.isShown = true

        this.escape()

        this.backdrop(function () {
          var transition = $.support.transition && that.$element.hasClass('fade')

          if (!that.$element.parent().length) {
            that.$element.appendTo(document.body) //don't move modals dom position
          }

          that.$element
            .show()

          if (transition) {
            that.$element[0].offsetWidth // force reflow
          }

          that.$element
            .addClass('in')
            .attr('aria-hidden', false)
            .focus()

          that.enforceFocus()

          transition ?
            that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
            that.$element.trigger('shown')

        })
      }

    , hide: function (e) {
        e && e.preventDefault()

        var that = this

        e = $.Event('hide')

        this.$element.trigger(e)

        if (!this.isShown || e.isDefaultPrevented()) return

        this.isShown = false

        $('body').removeClass('modal-open')

        this.escape()

        $(document).off('focusin.modal')

        this.$element
          .removeClass('in')
          .attr('aria-hidden', true)

        $.support.transition && this.$element.hasClass('fade') ?
          this.hideWithTransition() :
          this.hideModal()
      }

    , enforceFocus: function () {
        var that = this
        $(document).on('focusin.modal', function (e) {
          if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
            that.$element.focus()
          }
        })
      }

    , escape: function () {
        var that = this
        if (this.isShown && this.options.keyboard) {
          this.$element.on('keyup.dismiss.modal', function ( e ) {
            e.which == 27 && that.hide()
          })
        } else if (!this.isShown) {
          this.$element.off('keyup.dismiss.modal')
        }
      }

    , hideWithTransition: function () {
        var that = this
          , timeout = setTimeout(function () {
              that.$element.off($.support.transition.end)
              that.hideModal()
            }, 500)

        this.$element.one($.support.transition.end, function () {
          clearTimeout(timeout)
          that.hideModal()
        })
      }

    , hideModal: function (that) {
        this.$element
          .hide()
          .trigger('hidden')

        this.backdrop()
      }

    , removeBackdrop: function () {
        this.$backdrop.remove()
        this.$backdrop = null
      }

    , backdrop: function (callback) {
        var that = this
          , animate = this.$element.hasClass('fade') ? 'fade' : ''

        if (this.isShown && this.options.backdrop) {
          var doAnimate = $.support.transition && animate

          this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
            .appendTo(document.body)

          if (this.options.backdrop != 'static') {
            this.$backdrop.click($.proxy(this.hide, this))
          }

          if (doAnimate) this.$backdrop[0].offsetWidth // force reflow

          this.$backdrop.addClass('in')

          doAnimate ?
            this.$backdrop.one($.support.transition.end, callback) :
            callback()

        } else if (!this.isShown && this.$backdrop) {
          this.$backdrop.removeClass('in')

          $.support.transition && this.$element.hasClass('fade')?
            this.$backdrop.one($.support.transition.end, $.proxy(this.removeBackdrop, this)) :
            this.removeBackdrop()

        } else if (callback) {
          callback()
        }
      }
  }

これがjsへのリンクです。http://jsfiddle.net/dazaweb/5cR95/

私がこれについてどうやって行くかについてのアイデアはありますか?

4

4 に答える 4

2

あなたが持っているモーダル定義にdata-dismiss="modal"、を追加しますdata-target="#theIdOfTheModal"

これにより、その特定のモーダルのみを閉じるように指示されます

これを示すフィドルを作成しましたが、実際にはデータターゲットの有無にかかわらず機能します: フィドル!

于 2012-11-30T19:44:01.410 に答える
1

モーダル非表示メソッドに追加(最上行)

e & e.stopPropogation();

これにより、親や残りの子供たちへのバブリングイベントが停止します。

また、 escapeメソッド内でhide()(になるように)イベントパラメータを渡します。hide(e)

于 2013-10-07T20:01:38.530 に答える
1
  1. キャンセルして閉じるボタンで、これを削除します:data-dismiss = "modal";
  2. 次に、クラスを追加します。例: "close_modal";
  3. javascriptで、次のようなデリゲート関数を作成します。

Javascript:

$(document).on('click', 'button:button.close_modal', function ( event ) {
  event.preventDefault();
  var $this = $(event.currentTarget);
  var modalId = $this.closest('div.modal').attr('id');
  $('#'+modalId+'').modal('hide');
});
于 2014-01-10T12:55:33.000 に答える
0

$('#myModal .close').click();
于 2021-01-11T11:08:37.313 に答える