【问题标题】:Only the first results of sql show when unhidden取消隐藏时仅显示 sql 的第一个结果
【发布时间】:2013-06-07 03:08:48
【问题描述】:

我之前问过一个问题,关于如何使用 jquery 在单击时隐藏和显示 sql 结果。感谢Þaw帮助我... 现在我转向类似但不同的东西,更多的是“代码中的错误”。我有一个 php 文件,它从 db 表中检索所有数据,只显示一行(表中我的数据的标题)。单击标题后,会显示一个隐藏的 div,它会返回其余数据。我在这里遇到的问题是,表格中有多个条目......显示/隐藏魔法仅适用于第一行,无论我点击哪个标题。

这是我的 js

function showDiv() {
if (document.getElementById('hiddenDiv').style.display == 'block') {
        document.getElementById('hiddenDiv').style.display = 'none';
    } else {
        document.getElementById('hiddenDiv').style.display = 'block';
    }
}

这是我的 php/html

<div><h2 Style="margin:auto;display: block; padding-bottom: 0; margin-bottom: 0;    background: #e0741b; width: auto;color: white;" onclick="showDiv();"><?php echo   $rows['title']; ?></h2></div>
<div id="hiddenDiv" style="display:none">

<strong><h3 style="color:black" ><? echo $rows['name']; ?></h3></strong><br/>

<p style="color: grey; font-size:10pt;"><strong><?php echo $rows['details']; ?>  </strong></p>

<p style="font-size: 10pt;"> <strong>Email:</strong> <?php echo $rows['email']; ?></p>

<p style="font-size: 10pt;"> <strong>Phone:</strong> <?php echo $rows['phone']; ?></p>

<p style="font-size: 10pt;"> <strong>Link:</strong> <?php echo $rows['link']; ?></p>


</div>

【问题讨论】:

  • 为什么在最后一个&lt;p&gt;的末尾有悬空的&lt;/td&gt;&lt;/tr&gt;
  • 如果这段代码在一个 php 循环中,你认为你有多少个 id = hiddenDiv 的 div?在那种情况下,HTML 是无效的......也许你可以尝试连接每行的 id 或其他东西来识别每个块......并将这个 id 作为参数发送给 showDiv......
  • @Mate 对不起,如果我听起来有点笨,我是个新手......但是当你说“连接每一行的 id”时,我会怎么做呢?
  • 没问题,这是问的好地方 :D 。您的结果中有 $rows['id'] 或任何唯一值吗?
  • 啊啊啊!我知道你会怎么做,是的,我知道......

标签: php javascript show-hide


【解决方案1】:

不是我要编写的代码,而是在这里使用您自己的代码来解决隐藏/显示问题:注意添加 $rows['id'] 这假设数据有一个名为 id 的字段(将其更改为实际的唯一字段名称)

    <script>
        function showDiv(id) {
            if (document.getElementById('hiddenDiv'+id).style.display == 'block') {
                document.getElementById('hiddenDiv'+id).style.display = 'none';
            } else {
                document.getElementById('hiddenDiv'+id).style.display = 'block';
            }
        }
    </script>
--LOOP STARTS--
    <div>
        <h2 Style="margin:auto; display: block; padding-bottom: 0; margin-bottom: 0; background: #e0741b; width: auto;color: white;" onclick="showDiv(<?php echo $rows['id']; ?>);"><?php echo $rows['title']; ?></h2></div>
    <div id="hiddenDiv<?php echo $rows['id']; ?>" style="display:none">
        <strong><h3 style="color:black"><? echo $rows['name']; ?></h3></strong><br />
        <p style="color: grey; font-size:10pt;"><strong><?php echo $rows['details']; ?>  </strong></p>
        <p style="font-size: 10pt;"><strong>Email:</strong> <?php echo $rows['email']; ?></p>
        <p style="font-size: 10pt;"><strong>Phone:</strong> <?php echo $rows['phone']; ?></p>
        <p style="font-size: 10pt;"><strong>Link:</strong> <?php echo $rows['link']; ?></p>
    </div>
-- LOOP ENDS ---

所以你所做的是给 hiddendiv 一个唯一的 id,然后将相同的 id 传递给 show/hide js 函数,以便它知道要显示和隐藏哪个

【讨论】:

    【解决方案2】:

    每个 DOM 元素只能有一个 ID 属性值。每个 ID 对文档来说必须是唯一的。

    【讨论】:

    • 我的第一个猜测是它可能是 ID 冲突,但我不确定如何解决这个问题以使其获得不同的唯一 ID...我想可能使用“类”,但是我想既然 js 说“getElementById”那么它会导致我各种各样的错误。有什么建议吗?
    【解决方案3】:

    循环在哪里?我错过了什么吗?在您隐藏的 DIV 中应该有类似下面的内容。这是一个通用表,请根据您的工作进行调整。我不确定您使用的是哪个数据库连接,这是假设 PDO。

    echo '<table>';
    echo '<thead><tr><td>Name</td><td>details</td><td>email</td><td>phone</td></tr></thead>';
    
    while ($row = $stmt -> fetch(PDO::FETCH_ASSOC)) {
      echo '<tr>';
      echo '<td>' . $row['name'] . '</td>';
      echo '<td>' . $row['details'] . '</td>';
      echo '<td>' . $row['email'] . '</td>';
      echo '<td>' . $row['phone'] . '</td>';
      echo '</tr>';
    }
    echo '</table>';
    

    我知道这与您想要的布局不同,但这是一般的想法。

    希望对您有所帮助。

    【讨论】:

    • Felix 说“显示/隐藏魔法只适用于第一行”。所以我猜测隐藏/显示工作得很好,但只有一行显示(因为他没有在他显示的代码中指定任何循环)。我现在明白他的意思了,整个代码块都在循环中(未显示)。
    • 而且它只适用于第一行,因为每一行都有相同的 ID。
    猜你喜欢
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2013-06-03
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多