jquery
  • html
  • 2010-08-29 72 views 1 likes 
    1
    $('.more').click(function test(id) { 
          $('#MoreFriendInfo'+id).toggle(); 
        }); 
    

    我做了这个,功能测试(id),现在我应该如何使链接正确在html/php为了抢ID? 我尝试这样做,但它不工作:jquery:函数在“onclick”

    <a class='more' href="javascript:void(0);" onclick='test(<?php echo $showInfo["bID"]; ?>)'>mer</a> 
    

    在Firebug我碰到一个“自定义测试的心不是”

    回答

    1

    在所有这些,我们从标记去掉onclick

    您可以使用数据属性,像这样:

    <a class='more' href='#' data-id='<?php echo $showInfo["bID"]; ?>'>mer</a> 
    

    然后抓住它在你的.click()处理程序,如:

    $('.more').click(function() { 
        $('#MoreFriendInfo'+$(this).attr('data-id')).toggle(); 
    }); 
    

    或者如果它在另一个容器忘记了ID和find it relatively,例如,如果标记是这样的:

    <div class="container"> 
        <a class='more' href="#">mer</a> 
        <div class="moreFriendInfo">Content</div> 
    </div> 
    

    你可以这样做它是这样的:

    $('.more').click(function() { 
        $(this).closest('.container').find('.moreFriendInfo').toggle(); 
    }); 
    

    (在这种情况下,你可以实际使用.siblings(),但它意味着是一个更一般的AP proach)

    +0

    谢谢你在接受你的问题,我有一个问题。你能指定你想要的任何attr名吗? (到你的第一个解决方案) – Karem 2010-08-29 17:14:37

    +0

    @Karem - 它们应该以'data-'前缀开头,除此之外,无论你想要什么,它们都不会对HTML4造成任何伤害,它们实际上是规范中的一部分HTML5。 – 2010-08-29 17:16:09

    1

    您定义它的方式,test(id)是一个内部函数,仅在.click()范围内。

    请注意,当您使用.click()时,您正在有效地定义onclick。您也不需要将其添加到标记中。

    我不是通过id来设计标记,而是通过这种方式来设置元素,使得我可以使用selector context来传递选择器的起始点。

    $('.more').click(function() { $('.moreFriendInfo',this).toggle(); });

    +0

    这种方法会在anchor中找到一个'class =“moreFriendInfo”'element *“,这看起来不是这种情况:) – 2010-08-29 17:15:08

    +0

    @Nick,请参阅我在代码上面说的”而不是传递id“ 。代码也可以使用$(this).parent()的选择器。 **没有理由在这样的情况下做一个完整的dom搜索** – 2010-08-29 17:17:09

    +0

    @rchern - 我从来没有说过搜索整个DOM :)看到我的回答,像'$(this).siblings()'或'$(this).closest('selector')。find('selector')'就是我所说的。 – 2010-08-29 17:19:31

    0

    尼克的答案几乎是完美的,但除非数据-ID是一个有效的HTML属性我会使用,而不是“数据ID”,“版本”。

    +0

    它们是有效的属性,'data-anything'保留给那些你希望在那里的属性,但从来没有:) – 2010-08-29 17:18:20

    相关问题