【问题标题】:Form input tab broken after ajax requestajax请求后表单输入选项卡损坏
【发布时间】:2017-01-13 22:59:30
【问题描述】:

我有一个用户注册表单,由 AJAX 请求处理。
当 AJAX 请求完成时,SweetAlert 会向用户显示所发生情况的更新,但是当我关闭它并在表单字段中单击返回时,键盘上的 Tab 键不再执行任何操作。

添加了 settimeout,以便我可以看到第一个 swal 显示的内容,以便“模拟”缓慢的互联网连接。

<div class="box box-info">
    <div class="box-body">
        <form id="db-test">
            <div class="input-group">
                <span class="input-group-addon"><i class="fa fa-user"></i></span>
                <input type="text" id="user" class="form-control" placeholder="Username" autocomplete="off">
            </div>
            <br>
            <div class="input-group">
                <span class="input-group-addon"><i class="fa fa-key"></i></span>
                <input type="password" id="pass" class="form-control" placeholder="Password" autocomplete="off">
            </div>
            <br>
            <button class="pull-right btn btn-info" id="register"><b>register</b></button>
        </form>
    </div>
</div>

<script type="text/javascript">
    (function () {

        $('#register').submit(function (e) {
            e.preventDefault();

            var credentials = {
                username: $('#user').val(),
                password: $('#pass').val()
            }

            swal({
                title: 'Working on your registration',
                text: 'Give me a bit...<br/><br/><i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i>',
                html: true,
                showConfirmButton: false
            });
            setTimeout(function () {
                $.ajax({
                    url: '../register',
                    method: 'POST',
                    headers: {'X-api': 'application/json'},
                    data: credentials
                })
                    .done(function (data, textStatus, jqXHR) {
                        swal({
                            title: 'Result',
                            text: '<pre>' + JSON.stringify(data, null, 4) + '</pre>',
                            html: true
                        })
                    });
            }, 1000);
        })
    })();
</script>

【问题讨论】:

    标签: javascript jquery html ajax sweetalert


    【解决方案1】:

    经过大量挖掘,似乎是SweetAlert的问题。
    现在已经有一个问题公开了很长一段时间,它描述了这个问题。 https://github.com/t4t5/sweetalert/issues/391

    目前看来我需要这样做(注意window.onkeydownwindow.onfocus

    swal({
        title: 'Working on your registration',
        text: 'Give me a bit...<br/><br/><i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i>',
        html: true,
        showConfirmButton: false
    });
    $.ajax({
        url: '../register',
        method: 'POST',
        headers: {'X-api': 'application/json'},
        data: credentials
    })
        .done(function (data, textStatus, jqXHR) {
            window.onkeydown = window.onfocus = null; // This line is the solution
            swal({
                title: 'Result',
                text: '<pre>' + JSON.stringify(data, null, 4) + '</pre>',
                html: true
            })
    });
    

    【讨论】:

    • 正是我想要的!感谢分享芽!
    【解决方案2】:

    几个问题:

    您需要正确关闭您的第一个swal。你让它打开。在您的第一个 swal 上设置 timer: 1000 而不是在第二个上使用 setTimeout。不需要。

    swal({
        title: 'Working on your registration',
        text: 'Give me a bit...<br/><br/><i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i>',
        html: true,
        timer: 1000,
        showConfirmButton: false
    });
    

    在您的 AJAX 调用中无需使用.done,只需使用success,然后在确认closeOnConfirm: true 时关闭您的最后一个swal

    $.ajax({
        url: '../register',
        method: 'POST',
        headers: {'X-api': 'application/json'},
        data: credentials,
        success: function (data) {
            swal({
                title: 'Result',
                text: '<pre>' + JSON.stringify(data, null, 4) + '</pre>',
                html: true,
                closeOnConfirm: true
            })
        };
    });
    

    【讨论】:

    • 首先:setTimeout 并不重要,请阅读问题。第二:jQuery.ajax() 页面上的文档和所有示例都显示 .done,而不是 .success。第三:closeOnConfirm 不是解决方案,对不起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2015-07-20
    • 2019-12-12
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    相关资源
    最近更新 更多