2014-05-19 2 views
0

다음 코드를 사용하여 선택한 모든 확인란의 값을 텍스트 영역에 삽입하려고합니다.선택한 체크 상자를 반복합니다.

$('input[name="user"]:checked').each(function(){ 
    parent.setSelectedGroup($(this).val()+ "\n"); 
    }); 

그러나 나는 항상 하나의 값만 얻습니다.

선택한 모든 확인란의 값을 가져 오는 올바른 방법으로 코드를 작성하는 방법은 무엇입니까?

미리 감사드립니다.

EDIT

1) "부모"의 체크 박스가 fancybox.iframe이기 때문에. 부모 창에서

2) setSelectedGroup 모든 값을 받고

function setSelectedGroup(groupText){ 
$('#users').val(groupText); 
+2

'parent'와'setSelectedgroup'처럼 좀 더 알지 못하면 추측하기 어려울 것입니다. (values) : –

+1

'values.join ("\ n") : – tymeJV

+0

다음과 같이 values.join ("\ value" ")' –

답변

3

당신 있습니다이며, 단순히 setSelectedGroup에 새로운 가치를 전달하는 컬렉션을 각 루프에. 그 방법은 추가하는 것이 아니라 내용을 대체한다고 생각합니다. 너무 빠르기 때문에 단순히 내용을 보지 못하고 있습니다.

parent.setSelectedGroup(
    //select elements as a jquery matching set 
    $('[name="user"]:checked')     
    //get the value of each one and return as an array wrapped in jquery 
    //the signature of `.map` is callback((index in the matching set), item)   
    .map(function(idx, el){ return $(el).val() }) 
    //We're done with jquery, we just want a simple array so remove the jquery wrapper 
    .toArray() 
    //so that we can join all the elements in the array around a new line 
    .join('\n') 
); 

해야합니다.

다른 몇 가지주의 사항 : 입력 선택기 이름 속성을 지정하는 아무 이유도 없다

  • 는, 일반적으로 속성 이름은 요소의 입력/선택/텍스트 영역 시리즈와 함께 사용됩니다.
  • 나는 또한 루프 내부의 DOM에 쓰는 것을 피할 것이다. 더 적은 수의 상태를 수정하는 것이 더 나은 기술이기는하지만 브라우저가 루프를 통과 할 때마다 레이아웃 계산을 수행해야하기 때문에 성능이 떨어지는 경향이 있습니다.
  • 강하게은 거의 항상 페이지의 관련 요소에 대한 상위 요소를 선택하는 것이 좋습니다. 그리고 그것을 통해 context parameter for jquery selectors 전달하십시오. 이렇게하면 html 변경 범위를 지정하고 실수로 페이지의 다른 부분을 수정하지 않아도됩니다.
+0

고마워요! 일! 그러나 진실하게 나는 당신의 코드를 너무 많이 이해하지 못한다. 어쩌면 설명 할 수 있을까요? idx는 무엇을 의미합니까? – Someone33

+0

@ Someone33 done. 'idx'는 일치하는 세트의 인덱스입니다. [지도상의 문서보기] (http://api.jquery.com/map/#map-callbackindex--domElement) –

+0

좋아요! 편집 해 주셔서 다시 한 번 감사드립니다. – Someone33

관련 문제