Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Jquery:如何仅访问表中指定的div_Php_Javascript_Jquery_Loops_While Loop - Fatal编程技术网

Php Jquery:如何仅访问表中指定的div

Php Jquery:如何仅访问表中指定的div,php,javascript,jquery,loops,while-loop,Php,Javascript,Jquery,Loops,While Loop,我在使用Jquery的表中一次只能隐藏/显示1个div时遇到问题。 我在一个表中有两行:第一行包含一个链接,该链接将在第二行中切换div(.displayMail)。这些行有很多实例,所以当我点击链接时,它应该只更新它下面的下一个div,但它会更新所有div!!??有人愿意帮一个笨蛋吗 这是我的表,由php使用while循环生成,其中的行数根据ttl而变化。行数 <table id="inboxTable" class="txt13" width="800px"> <tr>

我在使用Jquery的表中一次只能隐藏/显示1个div时遇到问题。 我在一个表中有两行:第一行包含一个链接,该链接将在第二行中切换div(.displayMail)。这些行有很多实例,所以当我点击链接时,它应该只更新它下面的下一个div,但它会更新所有div!!??有人愿意帮一个笨蛋吗

这是我的表,由php使用while循环生成,其中的行数根据ttl而变化。行数

<table id="inboxTable" class="txt13" width="800px">
<tr><th style="text-decoration:underline">From</th><td width="20px"></td><th style="text-decoration:underline">Subject
    </th><td width="20px"></td>
    <th style="text-decoration:underline">Date</th><td width="20px"></td>
    <th style="text-decoration:underline">Action</th></tr>';

while($info=mysql_fetch_array($result)){
    $this->requestsMail .='
    <tr>
    <td width="100px"><a href="#" class="showMail" onClick="viewMail()">read</a></td></tr>
    <tr><td colspan="7"><div class="displayMail" style="margin:10px 120px 10px 120px" onClick="viewMail()">View Message</div></td></tr>
    ';
}

      $this->requestsMail .='</table>
我可以获得更新所有div的链接,但我只想更新相应的div。
我用next()、children()、parents()……尝试了许多访问(“.displayMail”)的组合,基本上什么都有,但当我点击相应的按钮时,我仍然无法找到它。为了让它正常工作,花了这么多时间:(

您需要应用一些DOM遍历

function viewMail(){
    $("a.showMail").click(function() {
        $(this).closest('tr').next().find('.displayMail').toggle();
        return false;
    });
}  
只需选择
.displayMail
jQuery将正确地查询所有这些div。通过调用,我们将遍历DOM,直到
的第一个实例。从那里,我们转到下一个
调用,并最终搜索该节点,以查找
的正确实例。displayMail

更新

我刚刚实现了您的调用约定。通过调用
onclick
处理程序中的
viewMail
,您每次都会绑定另一个click处理程序。因此,您只需调用:

$(function() {
    $("a.showMail").click(function() {
         $(this).closest('tr').next().find('.displayMail').toggle();
         return false;
   });
});

这将绑定单击事件处理程序一次。删除
onclick
属性。

我将删除
viewMail()
函数,并将jQuery更改为:

function viewMail(){
    $("a.showMail").click(function() {
        $(this).parent('tr').next().find(".displayMail").toggle(); 
        return false;
    });
} 
$("a.showMail").click(function() {
    $(this).closest('tr').next().find('.displayMail').toggle();
    return false;
});

$("div.displayMail").click(function() {
    $(this).toggle();
    return false;
});

我可以问一下,为什么要在调用
onClick()
处理程序的同一元素的
click()
处理程序的函数中放置
click()
处理程序?这有点多余,不是吗?
.parent()
只会移动一个级别,那就是
节点。你真是太棒了!!我应该在几个小时前发布,哈哈。谢谢你!还有很好的解释。所以next()只能作为对前面指定元素的引用(最近的(tr))对吗?@Anriëtte:没什么。这看起来像是投了反对票,没关系。总之你是对的,我不知道OP是如何调用这个方法的。@jAndy:如果你仔细看,你会发现他正在调用
viewMail()
来自
上的
onClick
处理程序:
,因此我的答案如下。你们都很棒。感谢所有的帮助。我接受了你们的建议并删除了onClick属性。现在工作起来很有魅力!:)
$("a.showMail").click(function() {
    $(this).closest('tr').next().find('.displayMail').toggle();
    return false;
});

$("div.displayMail").click(function() {
    $(this).toggle();
    return false;
});