Bootstrap模态在调用时不显示

时间:2018-08-24 09:30:47

标签: javascript php jquery html

因此在其中一页上,我有:(第一页)

if (isset($_SESSION['isSuspend'])){
    echo '<script>$("#SuspendModal").modal("show");</script>';
    unset($_SESSION['isSuspend']);
}

在同一页面上,我有模式:

<div class="modal" tabindex="-1" role="dialog" id="SuspendModal">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Suspension System</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                <p><?php echo $_SESSION['isSuspend']; ?></p>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-primary" data-dismiss="modal">Okay</button>
            </div>
        </div>
    </div>
</div>

和另一页上:(第二页)

if ($conn->query($sql) === TRUE){
        $_SESSION['isSuspend'] = "You have suspended ".$user_id."!";
        header("Location: ../admin/edit.php?user=$user_id");
    } else {
        echo "DEBUG: Error: ".$sql."<br>".$conn->error;
    }

我的问题是,在我单击“暂停”按钮的第一页上,它将直接指向suspend.php,这是第二页,如果成功将其添加到数据库中,则会将会话var设置为所述字符串。但是,当它返回到第一页时,尽管被调用,引导模式也不会打开。我在做什么错了?

3 个答案:

答案 0 :(得分:3)

您可以使用jQuery进行此操作。

HTML

<div class="modal" tabindex="-1" role="dialog" id="SuspendModal">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Suspension System</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                <p>asd</p>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-primary" data-dismiss="modal">Okay</button>
            </div>
        </div>
    </div>
</div>

jQuery

<script>
    $(document).ready(function(){
        $("#SuspendModal").modal();
    });
</script>

上面的代码将在页面加载后打开您的模式。

您可以进行几项检查,以增加对何时打开模式的要求:

示例

<?php if($_SESSION['something'] == 'something'): ?> // You can also do it on $_POST / $_GET / $array / $string etc.
<script>
    $(document).ready(function(){
        $("#SuspendModal").modal();
    });
</script>
<?php endif; ?>


额外笔记

我个人更喜欢停止PHP而不是回显您的脚本和内容。

所以代替:

if (isset($_SESSION['isSuspend'])){
    echo '<script>$("#SuspendModal").modal("show");</script>';
    unset($_SESSION['isSuspend']);
}

我会这样做的:

<?php if (isset($_SESSION['isSuspend'])): ?>
    <script>
        $("#SuspendModal").modal("show");
    </script>
    <?php unset($_SESSION['isSuspend']);
endif; ?>

对我而言,阅读代码并最终调试/改进脚本要容易得多。 (PHPStorm中的ATLEAST)


额外注释2

对于模态,您可能还想知道的另一件事是

可能发生某些CSS设置未正确解析的情况。我最终通过删除tabindex="-1"来解决了这个问题。只是一个小注意:-)。


文档

答案 1 :(得分:1)

我认为您的脚本的问题是它不会在加载时被调用 要在加载时执行脚本,您需要这样做

if (isset($_SESSION['isSuspend'])){
    echo '<script>$(window).on("load",function(){ $("#SuspendModal").modal("show"); }</script>';
    unset($_SESSION['isSuspend']);
}

通过这种方式,页面加载后将执行显示模式脚本。

答案 2 :(得分:1)

也许您是在页面开头编写此php代码

if (isset($_SESSION['isSuspend'])){
   echo '<script>$("#SuspendModal").modal("show");</script>';
   unset($_SESSION['isSuspend']);
}

那个时候DOM不会被完全加载,所以最好在脚本中写成这样的代码

<script>
    $(document).ready(function(){
        var session='<?php echo $_SESSION['isSuspend']; ?>'
        if(session){
            $("#SuspendModal").modal("show");
        }
    });
</script>