模态内部的微调器在等待数据加载时

时间:2017-10-27 02:29:34

标签: javascript jquery css asp.net-mvc bootstrap-modal

我有一个项目列表,每个项目都附有徽章。单击徽章时,它将从局部视图加载表格。

这是我的徽章循环:

  @foreach (var item in Model)
  {
        <li>
            <a href="#my_modal" data-toggle="modal" data-book-id="@Url.Action("AssociatedToHideout", "Hideout", new { id = item.HideoutID })">
                <span class="badge-rounded bg-red">@Html.Action("TaskCount", "Hideout", new { id = @item.HideoutID })</span>                  
            </a>
            <div class="item">            
                <a href='@Url.Action("Index", "Hideout", new { id = @item.HideoutID })'>
                    <img src="~/Assets/img/database.png">
                    <span class="caption">@item.Name</span>
                </a>
            </div>

        </li>      
}

data-book-id中的URL Action将告诉我要加载哪个部分视图。

这是我的模态:

<div class="modal" id="my_modal">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
                <h4 class="modal-title">Modal header</h4>
            </div>
            <div class="modal-body">
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>  

将其加载到模态中的脚本是:

<script>
    $('#my_modal').on('show.bs.modal', function(e) {
        var bookId = $(e.relatedTarget).data('book-id');

        $.get(bookId, function (data) {
            $(e.currentTarget).find('.modal-body').html(data);
        });
    });

    $('#my_modal').on('hidden.bs.modal', function(e) {
    $(e.currentTarget).find('.modal-body').text('');
    });
</script>

问题是,当我第一次加载页面时,有时会立即显示.html(data)不显示的内容,所以我希望旋转器在等待时出现。我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

我们使用waitscreen.js。它非常简单易用available on github。您需要显示或隐藏的是:

//Show options
waitScreen.show();
waitScreen.show("Message");
//Then hide
waitScreen.hide();

将它们嵌入适当的地方,即:

$('#my_modal').on('show.bs.modal', function(e) {
    var bookId = $(e.relatedTarget).data('book-id');
    waitScreen.show();

    $.get(bookId, function (data) {
        $(e.currentTarget).find('.modal-body').html(data);
        waitScreen.hide();
    });
});

你还应该添加一些错误处理,因为如果发生任何错误,模态永远不会消失......

答案 1 :(得分:0)

在进行ajax调用之前,您可以将loding gif图像设置为.modal-body div的内容。当您的ajax调用从服务器获取响应时,它将被该响应覆盖。

$('#my_modal').on('show.bs.modal', function(e) {
    var bookId = $(e.relatedTarget).data('book-id');
    var imgUrl="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/0.16.1/images/loader-large.gif";
    var $loading = $("<img />").attr("src",imgUrl)

    $(e.currentTarget).find('.modal-body').html($loading);

    $.get(bookId, function (data) {
        $(e.currentTarget).find('.modal-body').html(data);
    });
});

答案 2 :(得分:0)

此处的技巧是 temp hum id 0 1 2 3 1 1 2 3 2 1 2 3 ,方法是删除默认背景,并通过使用一些alpha设置对话框本身的背景颜色来创建虚拟背景。

data-backdrop="false" style="background-color: rgba(0, 0, 0, 0.5);"

注意:单击背景不会按预期关闭对话框。 解决方案:为此,您必须添加一些Java脚本代码。这是一些如何实现此目的的示例。

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" data-backdrop="false" style="background-color: rgba(0, 0, 0, 0.5);">
<div class="modal-dialog" role="document">
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal"
                aria-label="Close">
                <span aria-hidden="true">&times;</span>
            </button>
            <h4 class="modal-title" id="myModalLabel">Modal title</h4>
        </div>
        <div class="modal-body">...</div>
        <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            <button type="button" class="btn btn-primary">Save changes</button>
        </div>
    </div>
</div>