【问题标题】:Can't use one modal with multiple buttons不能使用具有多个按钮的一种模式
【发布时间】:2017-01-10 10:03:42
【问题描述】:

我正在处理一个网页,其中有一个由 JSON 填充的表格。

在表格的右侧,我有三 (3) 个号召性用语按钮,如下面的屏幕截图所示:

当我点击第一行的“vis”按钮时,它会打开相应的模态。

但是,当我点击随后的“vis”按钮(向下的第二行)时,什么也没有发生。

以下是我的代码(PHP 循环,以便根据 MySql DB 中的可用数据添加更多行)

<tr>
    <td><? echo $row['filename']; ?></td>
    <td><? echo $row['cat']; ?></td>
    <td><? echo $row['size']; ?></td>
    <td><? echo $row['usr']; ?></td>
    <td><? echo $row['date']; ?></td>
    <td width="18%">
        <a href="#" class="btn btn-primary" id="openItem" data-toggle="modal" href="#show-dialog" onclick="window.location.hash = '<? echo $row['id'];?>';">Vis</a>
        <a href="#" class="btn btn-success" id="downloadItem" download="">Last ned</a>
        <a href="#" class="btn btn-danger" id="deleteItem" data-toggle="modal" href="#error-dialog" onclick="window.location.hash = '1';">Slett</a>
    </td>
</tr>

我的模态(HTML代码)

<div class="modal fade" id="show-dialog" style="height: auto; max-height: 500px;">
        <div class="modal-header">
            <a class="close" data-dismiss="modal">x</a>
            <h3>video_raw01.raw</h3>
        </div>
        <div class="modal-body">
            <video width="100%" controls>
                <source src="mov_bbb.mp4" type="video/mp4">
                <source src="mov_bbb.ogg" type="video/ogg">
                Your browser does not support HTML5 video.
            </video> <br>
            <table>
                <tr>
                    <td><a href="#">url:path/to/video/raw</a></td>
                </tr>
            </table>

        </div>
        <div class="modal-footer" style="position: absolute; bottom: 0; float: right; width: 100%;">
            <a href="#" class="btn btn-success btn-modal btn-cancel"  data-dismiss="modal">Last ned</a>
            <a href="#" class="btn" data-dismiss="modal">Lukk</a>
        </div>
    </div>

还有我的 JavaScript 代码(使用 jQuery 库)

<script>
    $(document).ready(function(){

        $("#openItem").on("click", function(){ $("#show-dialog").modal();});
        $("#deleteItem").on("click", function(){ $("#error-dialog").modal();});
        $('#show-dialog').on('show.bs.modal', function(e) {
            var hash = window.location.hash;   
            console.log("LOG: "+hash);

        });
</script>

是否有任何原因导致后续行按钮上的单击操作不会打开它们各自对应的模态?

【问题讨论】:

    标签: javascript php jquery twitter-bootstrap modal-dialog


    【解决方案1】:

    TL;DR

    是否有任何原因导致后续行按钮上的单击操作不会打开它们各自对应的模态?

    是的;因为 id 必须是唯一的。

    如果多次出现相同的id (不应该),则只有第一个可以使用并可用于操作。


    使用类而不是 id 来解决它,如:class="openItem" 代替 id="openItem"

    随后,还应编辑您的脚本以引用适当的模式,如下所示:

    <script>
        $(document).ready(function(){
    
            $(".openItem").on("click", function(){ $("#show-dialog").modal();});
            $(".deleteItem").on("click", function(){ $("#error-dialog").modal();});
            $('.show-dialog').on('show.bs.modal', function(e) {
                var hash = window.location.hash;   
                console.log("LOG: "+hash);
    
            });
    </script>
    

    看看这个answer,再看看this one too,可以很好地了解classid之间的区别,所以为了了解您所面临挑战的性质:只有第一次出现的 id 会受到影响

    【讨论】:

    • 那行不通,因为我已经在使用一个类来定义样式。我试着把它改成一个类,没用
    • @StianInstebo:那么你应该使用不同的类。 ID 应该是唯一的。它绝对应该有效。让我知道结果。
    • 谢谢你,这很有效,那么我需要找到一种新的方法来引导我的链接主题。谢谢:)
    • @StianInstebo:刚刚用参考更新了我的答案,以便深入了解您所面临挑战的性质。
    • 谢谢,我所做的是:'class="openItem btn btn-primary"',这行得通
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多