jQuery:.dialog()不适用于.classe选择器的下一个元素

时间:2018-07-16 22:33:18

标签: javascript php jquery jquery-ui

我使用php while循环生成一些带有点描述的项目。 每个项目都具有相同的类别,并以其图像开头。

目标是打开一个对话框,当我单击相应的图像时,该对话框将包含项目的描述。

这就是我所做的:

生成带有所有图片的所有项目:     

        while($result = $req->fetch()) {?>
                <img src="./css/images/icon/<?=$result['category']?>/<?=$result['rarity']?>" alt="<?=$result['object']?>" title="<?=$result['object']?>" class="obj">
                <p class="descr_obj">
                    Name : <?=$result['objet']?><br><br>
                    Rarity : <?=str_replace(".png", "", $result['rarity'])?><br><br>
                    Description :<br>
                    <?=$result['description']?>
                </p>

        <?php }?>

生成JQuery对话框:

$(".descr_obj").dialog({
        autoOpen: false
    })

    $(".obj").click(function(){
        text = $(this).next(".descr_obj").text();
        $(text).dialog("open");
    });

但是什么也没出现,控制台也没有显示任何错误...

能请你帮我吗? 预先谢谢你。

1 个答案:

答案 0 :(得分:0)

问题。主要的问题是您实际上从未告诉过要打开对话框(通过使用.dialog("open")。第二个问题是最终会产生大量对话框-每个img都会出现一个对话框,因为您重新重复该段落。descr_obj类的每个实例都会拥有它自己的内容。

尝试这样的事情(我的php很烂,所以可能是错误的):

while($result = $req->fetch()) {?>
    <img src="./css/images/icon/<?=$result['category']?>/<?=$result['rarity']?>" 
         alt="<?=$result['object']?>" 
       title="<?=$result['object']?>" 
       class="obj" 
   data-name="<?=$result['objet']?>"
 data-rarity="<?=str_replace(".png", "", $result['rarity'])?>" 
   data-desc="<?=$result['description']?>">
<?php }?>
<p class="descr_obj">
    Name : <span class="name"></span><br><br>
    Rarity : <span class="rarity"></span><br><br>
    Description :<br>
    <span class="desc"></span>
</p>

但是JavaScript最终看起来像这样:

$(function() {
    let dialog = $(".descr_obj").dialog({
        autoOpen: false
    });

    $(".obj").click(function() {
        for(let prop of Object.keys(this.dataset)) {
            dialog.find(`span.${prop}`).html(this.dataset[prop]);
        }
        dialog.dialog("open")
    });
});
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<img src="https://i.stack.imgur.com/4fDk5.png" data-name="one" data-rarity="Super Rare" data-desc="Amazing" class="obj">
<img src="https://i.stack.imgur.com/xBUJX.png" data-name="two" data-rarity="Common" data-desc="Meh" class="obj">
<p class="descr_obj">
Name : <span class="name"></span><br><br>
Rarity : <span class="rarity"></span><br><br>
Description :<br>
<span class="desc"></span>
</p>