【问题标题】:Opening user profile in new tab在新选项卡中打开用户配置文件
【发布时间】:2019-10-01 14:51:54
【问题描述】:

我在表格中显示公告,我想让每一行都可点击,这有点像我用 js onclick 函数所做的那样(我只能点击名称,但我想将其应用于整行)。现在我想在新标签中查看有关公告的详细信息。我的问题从这里开始。我想在单击一行时获得公告 ID,但不知道该怎么做。另外我正在用js做onclick,其余的是php,所以那里有点乱。我知道这不是最好的方法,所以我需要你关于如何解决这个问题的建议。

附:我对js不是很熟悉,那些js部分取自网络教程。下面的代码是我显示搜索结果的部分。

<section id="results">
    <div class="container">
        <table>
            <tr>
                <a href="#"><th>Name</th></a>
                <th>Where</th>
                <th>From</th>
                <th>Date</th>
                <th>Price</th>
                <th>Type</th>
                <th>PId</th>
            </tr>

            <?php
                if(isset($_POST['search_btn'])){
                    include_once "db_connect.php";

                    $from = $_POST['from'];
                    $where = $_POST['where'];
                    $date = $_POST['date'];
                    $type = $_POST['type'];
                    $procid = $_POST['proc_id'];

                if(empty($from) || empty($where) || empty($date) || empty($type)){
                    header("Location: index.php?search=empty");
                    exit();
                }else{
                    $sql = "SELECT * FROM proc WHERE p_from = '".$from."' and p_where = '".$where."' and type= '".$type."' ";
                    $query = mysqli_query($conn, $sql);
                    $num_rows = mysqli_num_rows($query);
                        while ($rows = mysqli_fetch_array($query, MYSQLI_ASSOC)) {

                            echo "<tr><td onclick='content(this)'>" . $rows['p_name'] . " " . $rows['p_surname']. " </td><td>" .$rows['p_from']. "</td><td>" .$rows['p_where']. "</td><td>" .$rows['p_date']. "</td><td>" .$rows['price']. "</td><td>" .$rows['type']. "</td></tr>" ;
                        }
                        echo "</table>";
                    }

                }else{
                        echo "Error!";
                    }

            ?>


            <?php
                $fullUrl = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

                if(strpos($fullUrl, "search=empty") == true){
                    echo "<p class='error'>You did not fill in all fields!</p>";
                }

            ?>
        </table>
    </div>
</section>

<script>
        function content(elem){
            <?php 

             ?>
            window.open('procdetail.php');
        }
</script>

【问题讨论】:

  • 负责打开东西的代码在哪里?为什么不将该 ID 写入标记并使用数据属性读取它?
  • @NicoHaase 底部的 js 脚本实际上在新选项卡中打开了 procdetail.php。我只是不清楚如何从表中获取数据。我的意思是我希望能够单击一行中的任意位置并转到新标签中的公告详细信息。
  • @MagsudHajiyev 您正在将数据添加到&lt;td&gt; 标记上,如果您希望函数针对整行执行,只需将其添加到&lt;tr&gt; 标记上。如果有帮助,请查看我的回答。

标签: php html


【解决方案1】:

如果您想继续使用内联 JavaScript,您首先需要将 onClick 属性更改为位于 &lt;tr&gt; 元素上,而不是 &lt;td&gt; 元素上。完成后,您可以使用您在函数中设置的 window.open(); 方法中必须将 proc_id 传递给 URL 的相同函数。

HTML/PHP

echo '<tr onclick="content(\''. $rows['proc_id'] .'\')">';

Javascript

function content(ID){
            window.open('procdetail.php?proc_id=' + ID, '_blank');
        }

这将使每个表格行成为链接到procdetail.php?proc_id=&lt;YOUR_ID&gt;的可点击元素

也有一种方法可以在 HTML 中执行此操作,但您希望修改表格元素的 CSS,以便表格行中没有不可点击的死区。

使用您当前的单行回显方法,您可以使用类似于以下代码的内容。这会将proc_id 数据附加为procdetail.php 解析的URL 参数。

请注意,代码仅包含p_namep_surname。您必须使用相同的方法添加每个定义。

PHP

echo "<tr><td><a href='procdetail.php?proc_id=". $rows['proc_id'] ."' target='_blank'>". $rows['p_name'] . "</a></td><td><a href='procdetail.php?proc_id=". $rows['proc_id'] ."' target='_blank'>". $rows['p_surname'] ."</a></td></tr>";

CSS

table tr td a {
    display:block;
    height:100%;
    width:100%;
}

table tr td {
    padding-left: 0;
    padding-right: 0;
}

查看this thread 的问题。它包括一个可用的demo,托管在 JSFiddle 中。

【讨论】:

  • 请重新阅读问题:我认为,OP 已经找到了与您的代码类似的解决方案,但关键是如何将用户 ID 添加到该链接
  • @NicoHaase 你是对的。我确实误解了完整的请求。我已编辑我的答案以更正此问题。
  • @Bartzlack 非常感谢你!这就是我所需要的,而且效果很好!
【解决方案2】:

试试这个

<a href="your url address" target = "_blank"> link name </a>

【讨论】:

  • 你能进一步解释一下吗?此行在哪里使用 Javascript?
【解决方案3】:

在调用window.open 的JavaScript 函数中,您需要调用第二个参数作为打开窗口的目标,添加_blank 将在新选项卡而不是同一窗口中打开它:

window.open('procdetail.php', '_blank');

为 JavaScript 提供处理您的信息所需的数据。

此外,如果您的想法是使用 JavaScript 打开选项卡,其中包含专门针对该行的内容,那么您应该尝试向其返回必要的信息,例如,如果您想打开一个包含某行内容的新窗口用户,那么你必须让 JavaScript 知道应该打开哪个用户 id。

这就像在行元素的属性中返回用户 ID 的值一样简单,该值是 PHP 正在输出的数据。

在你的内联 PHP 脚本中做这样的事情:

echo "
<tr class='table-item' data-userid='USER_ID_VARIABLE_HERE'>
    <td>" . $rows['p_name'] . " " . $rows['p_surname']. " </td>
    <td>" .$rows['p_from']. "</td>
    <td>" .$rows['p_where']. "</td>
    <td>" .$rows['p_date']. "</td>
    <td>" .$rows['price']. "</td>
    <td>" .$rows['type']. "</td>
</tr>
";

然后在您的 JavaScript 代码中,您可以使用class="table-item" 为 DOM 中的每个元素使用事件侦听器:

window.onload = () => {
    let tableItems = document.querySelectorAll(".table-item");
    tableItems.forEach((element) => {
        element.addEventListener("click", (event) => {
            //Handle your click event here
            let userId = event.target.dataset.userid; //Your user id
            window.open('procdetail.php?id=' + userId, '_blank');
        });
    })
}

这将在一个新选项卡中打开给定 URL 的内容,即procdetail.php?id=userId。那么,在您的 procdetail.php 文件中,您必须处理 $_GET["id"] 变量以显示相应的数据。

其他资源:

你可以阅读更多window.open方法here

【讨论】:

  • 不,第一个信息仍然是使用window.open的第二个参数,你还没有解释应该使用什么
  • 您可以解释为什么应该使用它。只是告诉应该使用它并不能帮助任何人了解原因
  • 抱歉,我仍然无法确认您在写什么。通过在我的浏览器(Firefox 的当前版本)中调用window.open 而不使用第二个参数,打开一个新选项卡。第二个参数需要什么?或者你能告诉我我的代码做错了什么吗?
  • @NicoHaase window.open 默认情况下通过添加额外参数在当前选项卡中打开 url,它指定 url 应在新选项卡中打开
  • 通过添加在网络上找到的关于window.open 的所有信息以及它如何在您的浏览器@NicoHaase 上运行,我的答案将过于宽泛。我解释了他和你需要什么,所以他至少明白为什么需要第二个参数以及它是如何工作的。如果我不张贴他可以找到更多信息的地方,那将是一个问题。如果他想了解更多信息或只是解决他的问题,这取决于用户。我敢打赌,我的回答会真正帮助他了解当前信息。
猜你喜欢
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 2021-09-23
  • 2017-09-28
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
相关资源
最近更新 更多