2012-02-07 5 views
0

아래 기능을 사용하여 활동 피드의 설명란을 전환합니다. "메모"라는 단어를 클릭하면 주석 상자가 표시됩니다.jquery 개별 목록 항목을 전환하십시오.

이것은 목록의 첫 번째 요소에서만 발생합니다. 첫 번째 항목 이외의 항목에 "Comment"라는 단어를 클릭하면 첫 번째 comment_box가 토글됩니다.

각 메모 상자를 개별적으로 전환하려면 어떻게해야합니까? 또한이 문제는 jQuery에서 무엇입니까? 나는 그것을 보려고했지만 무엇을 부를지 몰랐다.

jQuery를

$(function(){ 

    $('span#comment_box').hide(); 

    $('.comment').click(function() { 

    $('#comment_box').toggle(); 

    }); 
    }); 

HTML 여기

<span href="" class="comment">Comment</span><br /> 
    <span id="comment_box"><textarea name="status_comment" /></textarea><br /></span> 

가 jsfiddle이다 -의 http://jsfiddle.net/jpBE3/

답변

3

먼저 모든 id 페이지의 각 요소에 대해 고유해야합니다. 같은 이드를 가진 여러 요소가있을 수 있으므로이 문제에 직면 해 있습니다. jQuery는 $('#comment_box')을 사용할 때 필요한 ID가있는 첫 번째 요소를 반환합니다.

id 대신 클래스를 사용하고 해당 클래스 이름으로 요소를 선택할 수 있습니다. nextAll을 사용하여 해당 선택기와 호출 토글 메소드를 찾기 위해 필수 선택기를 전달해야합니다.

마크 업 변화

<span href="" class="comment">Comment</span><br /> 
<span class="comment_box"><textarea name="status_comment" /></textarea><br /></span> 

JS

$(function(){ 
     $('span.comment_box').hide(); 
     $('.comment').click(function() { 
      $(this).nextAll('.comment_box:first').toggle(); 
     }); 
    }); 
+0

'$ (this) .next ('. comment_box ') .toggle();'을'$ (this) .nextAll (. 'next()'는 오직 하나의 원소를 반환하기 때문에 후속'first()'는 불필요합니다. –

+0

@Jordan -'next'는 즉시 형제를 볼 것입니다. 선택기가 일치하면 반환하거나 그렇지 않으면 아니오입니다. 모든 형제 자매를 조사하지 않습니다. http://api.jquery.com/next/를보십시오. 내 대답은': first '와 selector를 결합 할 수 있고'first' 메소드 호출을 피할 수 있습니다. – ShankarSangoli

+0

당신이 맞습니다, @ ShankarSangoli. 해명 해줘서 고마워. –

0

당신은 분명히 아이디 comment_box 더 하나 개의 요소를 가지고는 .... CSS ID는 페이지에 고유해야합니다. 그래서 첫 번째 comment_box는 페이지의 id comment_box와 함께 1 개의 요소 여야하기 때문에 토글됩니다. id 대신 클래스를 사용하십시오.

+0

지금 수업을 사용하고 있으며 댓글을 클릭하면 모든 댓글이 열립니다. 한 번에 하나의 댓글 상자를 전환하는 방법에 대한 아이디어가 있습니까? – chowwy

+0

위의 ShankarSangoli ...에서 제공하는 자바 스크립트를 사용하십시오. – Iansen

관련 문제