jquery
  • html
  • 2010-08-29 77 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

    相關問題