jquery中调用模态框手动显示函数modal('show')失效,然后曲线救了

写了一个html页面,本地访问服务端地址,本地数据读取显示渲染等操作都已经OK了,然后开心的发给后台同事,让他们合入一下。然后后台同事通过比较工具合入了,然后激动的测试一下,就发现有一个关于删除的模态框出不来拉。真是脑壳疼啊。然后开始检查,发现并不是后台的问题,而是html页面中的modal(‘show’)这一句执行的不起作用。百度了很久很久吧,始终没用找到解决方案。然后实在没办法了,想了另一个方法,曲线救国一下吧。

需求是这样的,有一个删除按钮。下方一个table,点击删除之前,有两种情况。A:用户没用选择,所以点击删除时弹出提示框,要用户至少选择一个;B:用户选择了,弹出给用户确认是否删除的提示框。之前做法是在btn的click事件中通过对checkBox的选择情况判断,再来决定手动显示哪一个modal。代码如下

本地webstore调试ok的代码,是两个modal。

<div class="modal fade" id="delSpellNoSelect" tabindex="-1" role="dialog" aria-labelledby="spellNoSelect" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h5 class="modal-title" id="spellNoSelect">提示</h5>
                </div>
                <div class="modal-body">请至少选择一条咒语!<br></div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
                    <button type="button" class="btn btn-primary" data-dismiss="modal">确定</button>
                </div>
            </div>
        </div>
    </div>
    <div class="modal fade" id="confirmDelSpell" tabindex="-1" role="dialog" aria-labelledby="delSpellInfo" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h5 class="modal-title" id="delSpellInfo">提示</h5>
                </div>
                <div class="modal-body" id="confirmDelSpellBodyContent">确认删除此咒语?<br></div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
                    <button type="button" id="btnConfirmDelSpell" class="btn btn-primary" data-dismiss="modal">确定</button>
                </div>
            </div>
        </div>
    </div>

再看js中btn的click事件,判断checkLength的值手动显示弹出不同的modal。

jQuery(document).ready(function($) {
   $("#btnDelSpell").click(function () {
    var checkLength = $("input:checkbox[name='ckb']:checked").length;
    if(checkLength == 0) {
        $('#delSpellNoSelect').modal('show');
        return;
    }
    $("#confirmDelSpell").modal('show');
   });
});

这种方式就是给了后台那边,就是显示不出来modal。后台那边采用的lua脚本语言。所以就决定换一种方案了。

修改后html代码,只留一个modal了,然后body部分增加了一个id:id="confirmDelSpellBodyContent"用来更改text的。

<div class="modal fade" id="confirmDelSpell" tabindex="-1" role="dialog" aria-labelledby="delSpellInfo" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h5 class="modal-title" id="delSpellInfo">提示</h5>
                </div>
                <div class="modal-body" id="confirmDelSpellBodyContent">确认删除此咒语?<br></div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
                    <button type="button" id="btnConfirmDelSpell" class="btn btn-primary" data-dismiss="modal">确定</button>
                </div>
            </div>
        </div>
    </div>

再看js代码:

$("#confirmDelSpell").on('show.bs.modal', function (event) {
      checkLength = $("input:checkbox[name='ckb']:checked").length;
      if(checkLength == 0) {
           $("#confirmDelSpellBodyContent").text("请至少选择一条数据!");
      } else {
           $("#confirmDelSpellBodyContent").text("确认删除此数据?");
      }
});
$("#btnConfirmDelSpell").click(function () {
   //删除功能的代码逻辑
   if(checkLength == 0) {
      return;
   }
});

而btn按钮要添加几个属性了:

aria-hidden="true" data-toggle="modal" data-target="#confirmDelSpell"
<div class="form-actions form-group button-margin-left">
    <button type="button" id="btnDelSpell" class="btn btn-primary btn-sm" aria-hidden="true" data-toggle="modal" data-target="#confirmDelSpell">删除</button>
    </div>

这样再到后台那边调试就ok了。

<think>好的,我现在要解决用户关于modal.show()函数的用法或定义的问题。首先,我需要查看用户提供的引用内容,看看是否有相关的信息。 引用[1]提到了Modal构造器和在jQuery对象上定义的方法,其中有一段代码是$.fn.modal = function(){},这可能就是modal插件的入口。通常,jQuery插件的方法是通过这样的方式添加的,所以modal.show()可能是这个插件的一个方法。 引用[2]中提到了opts.onModalShow事件,当调用show方法时可能会触发这个事件。这说明show函数可能与显示模态框有关,并且在显示时会执行用户定义的回调函数。 引用[3]展示了一个HTML模板,里面包含了模态框的结构。这可能说明modal.show()需要操作这些DOM元素,比如显示这个模板。 引用[4]讨论了BackDrop的count变量,用于处理多个模态框实例的情况。这说明当调用show方法时,可能会增加count,确保Backdrop正确显示和隐藏。 引用[5]提到在创建模态框时返回promise,并将resolve暴露给全局方法。这可能意味着modal.show()可以与异步操作结合,比如等待用户确认后再执行后续代码。 综合这些引用,modal.show()的主要功能是显示模态框,并可能支持参数配置、事件触发和异步处理。基本用法可能是通过选择器调用,如$('#myModal').modal('show'),或者直接调用实例的show方法。同时,可能需要配置选项,如内容、标题和回调函数。 用户可能想知道如何正确使用这个函数,是否需要参数,如何绑定事件,以及如何处理异步操作。需要将这些信息整理成结构清晰的回答,并附上代码示例,帮助用户理解具体用法。</think>### `modal.show()`函数的用法及定义解析 #### 1. 核心定义与语法结构 根据Bootstrap Modal组件的实现原理,`modal.show()`函数的定义包含以下核心逻辑: ```javascript // jQuery插件扩展方式定义 $.fn.modal = function(option) { return this.each(function() { var $this = $(this) var data = $this.data('bs.modal') if (!data) $this.data('bs.modal', (data = new Modal(this, option))) if (typeof option == 'string') data[option]() // 支持show/hide等方法调用 }) } // 构造器中定义show方法 Modal.prototype.show = function() { var that = this this.$element.trigger('show.bs.modal') // 触发前置事件 this.backdrop(function() { // 控制背景遮罩层 that.$element.show().scrollTop(0) that.enforceFocus() // 焦点控制 }) } ``` *关键点说明*: - 通过`$.fn.modal`扩展jQuery对象方法[^1] - `show()`方法内部处理了遮罩层显示、DOM元素可见性、焦点控制等逻辑[^4] #### 2. 基础调用方式 ```javascript // 通过jQuery选择器调用 $('#myModal').modal('show') // 直接调用实例方法 var myModal = new Modal(document.getElementById('myModal')) myModal.show() ``` #### 3. 完整参数配置示例 ```javascript $('#confirmDialog').modal({ show: true, // 初始化后立即显示 backdrop: 'static', // 点击背景不关闭 keyboard: false, // 禁用ESC关闭 onModalShow: function() { // 自定义显示回调 console.log('弹窗已显示') } }) ``` #### 4. 异步操作集成 结合Promise的现代用法(需自行扩展): ```javascript function showConfirmModal() { return new Promise((resolve) => { const modal = $('#confirmModal').modal({ onModalShow: () => { $('#confirmBtn').on('click', () => resolve(true)) $('#cancelBtn').on('click', () => resolve(false)) } }).modal('show') }) } // 使用示例 showConfirmModal().then(confirmed => { if(confirmed) console.log('用户确认操作') }) ``` *此模式常用于需要等待用户决策的场景[^5]* #### 5. 注意事项 - 多个模态框叠加时需注意`z-index`层级管理[^4] - 动态内容更新应在`shown.bs.modal`事件触发后执行 - 移动端需额外处理虚拟键盘与定位问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值