【问题标题】:Bootstrap modal not working on loop scenarios引导模式不适用于循环场景
【发布时间】:2018-05-22 18:23:01
【问题描述】:

我正在尝试在我的 javascript 中为 ajax 创建通用方法,但引导模式未按预期工作。

HTML:

<div class="modal fade" id="consult_modal_v2" role="dialog">
    <div class="modal-dialog">
        <div class="modal-content">
            <div style="background-color: #dc3d3e;color: #fff;height:85px !important;;" class="modal-header">
                <div>
                    <div class="row">
                        <div class="col-md-11">
                            <h4 id="message_v2" style="text-align:center;margin-top: 10px;"></h4>
                        </div>
                    </div>
                </div>
                <button id="con_close1_v2" type="button" class="close" data-dismiss="modal" aria-hidden="true">&times</button>
            </div>
            <div class="container"></div>
            <div class="modal-body">

                <div class="col-md-12" style="margin-top:3%;margin-bottom:2%;">

                    <div class="col-md-3" id="con_uname_v2" style="margin-top:11px">Admin Username</div>
                    <div class="col-md-9"><input type="text" id="con_sect_name_v2" class="form-control"></div>
                    <div class="col-md-3" id="con_pass_v2" style="margin-top:11px">Admin Password</div>
                    <div class="col-md-9"><input type="password" id="con_sect_pass_v2" class="form-control"></div>

                </div>

            </div>
            <div style="border:none;" class="modal-footer" >
                <button class="btn btn-default" id="con_close_v2" style="margin-top:3%;">Cancel</button>
                <button class="btn btn-default" id="con_sect_ok_v2" style="margin-right:2%;margin-top:3%;">Override</button>
                <button class="btn btn-default" id="con_upd_sect_ok_v2" style="display:none;margin-right:2%;margin-top:3%;">Override</button>

            </div>
        </div>
    </div>
</div>

JavaScript:

执行为

generalised_ajax('post_url',
    {
        'sub_id': sub_id,
        'status': status,
        '_token': csrf_token
    }, "POST", function () {
        console.log('success placing apt');
    }, {},
    function () {
        console.log('apt cancelled');
    }, {});

function generalised_ajax(url, data, type, post_success, post_success_params, post_cancel, post_cancel_params) {
    $.ajax({
        url: url,
        data: data,
        type: type,
        headers: {Accept: "application/json"},
        dataType: 'json',
        success: function (result, status, xhr) {
            post_success(post_success_params);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            if (xhr.responseJSON.type === "confirmation") {
                responseProcess = xhr.responseJSON;
                generalised_confirm(responseProcess.message, {
                    url: url,
                    data: data,
                    type: type,
                    post_success: post_success,
                    post_success_params: post_success_params,
                    post_cancel: post_cancel,
                    post_cancel_params: post_cancel_params
                }, responseProcess.config_name);
            } else if(xhr.responseJSON.type === "admin_auth"){
                generalised_authentication(responseProcess.message, {
                    url: url,
                    data: data,
                    type: type,
                    post_success: post_success,
                    post_success_params: post_success_params,
                    post_cancel: post_cancel,
                    post_cancel_params: post_cancel_params
                });
            }
        }
    });
}

function generalised_confirm(message, data, config_name) {
    var r = confirm(message);
    if (r === true) {
        data.data[config_name] = true;
        generalised_ajax(data.url, data.data, data.type, data.post_success, data.post_success_params, data.post_cancel, data.post_cancel_params);
    } else {
        data.post_cancel(data.post_cancel_params);
    }
}

var modelX = $("#consult_modal_v2");
function generalised_authentication(message, data){
    var uname = $("#con_sect_name_v2");
    var pass = $("#con_sect_pass_v2");
    $("#message_v2").val(message);
    modelX.modal('toggle');
    $("#con_sect_ok_v2").click(function(event){
        modelX.modal('toggle');
        data.data['a_uname'] = uname.val();
        data.data['a_pswd'] = pass.val();
        uname.val('');
        pass.val('');
        generalised_ajax(data.url, data.data, data.type, data.post_success, data.post_success_params, data.post_cancel, data.post_cancel_params);
    });
    $("#con_close_v2").click(function(event){
        modelX.modal('toggle');
        data.post_cancel(data.post_cancel_params);
    });
}

预期场景:

  1. 发送ajax
  2. 服务器响应 admin_auth 错误
  3. 打开模式
  4. 输入管理员凭据(错误的)
  5. 关闭模态
  6. 发送ajax
  7. 服务器响应 admin_auth 错误
  8. 从第 3 阶段重复

它现在是如何工作的

  1. 发送ajax
  2. 服务器响应 admin_auth 错误
  3. 打开模式
  4. 输入管理员凭据(错误的)
  5. 关闭模态
  6. 发送ajax

现在服务器响应与第 2 点相同的 ajax。但模式不会再次打开。 它与 javascripts 确认弹出窗口一起工作正常。

更新:

在我从模态中删除淡入淡出类之后,它开始每次都出现。但现在它发送了先前尝试的两倍 ajax。 比如第一次一次,第二次两次,第三次4次,第四次8次等等。

【问题讨论】:

  • Bootstrap modal 不能在循环场景中工作 我首先想到的是 ID 是动态的吗?改变?因为如果模态在一个循环之间,模态都将具有相同的 ID
  • 不,模态ID保持consult_modal_v2,它是相同的身份验证模态,如果身份验证失败一次,它应该在ajax响应时重新打开。

标签: javascript php jquery ajax twitter-bootstrap


【解决方案1】:

我不知道这种行为的原因是什么,但是 改变

$("#con_sect_ok_v2").click(function(event){
        modelX.modal('toggle');
        data.data['a_uname'] = uname.val();
        data.data['a_pswd'] = pass.val();
        uname.val('');
        pass.val('');
        generalised_ajax(data.url, data.data, data.type, data.post_success, data.post_success_params, data.post_cancel, data.post_cancel_params);
    });

$("#con_sect_ok_v2").one('click',function(event){
        modelX.modal('toggle');
        data.data['a_uname'] = uname.val();
        data.data['a_pswd'] = pass.val();
        uname.val('');
        pass.val('');
        generalised_ajax(data.url, data.data, data.type, data.post_success, data.post_success_params, data.post_cancel, data.post_cancel_params);
    });

解决了。

学分https://stackoverflow.com/a/3393694/2598994

【讨论】:

    猜你喜欢
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2023-03-26
    • 2017-05-26
    • 2016-10-06
    • 1970-01-01
    相关资源
    最近更新 更多