2011-11-01 2 views
2

설문 조사에서 질문에 대한 답변이 있었는지 알기 위해 사용하는 일련의 변수가 있으며, 처음에 거짓으로 설정됩니다 : q0=false; q1=false; qX=false;. 그 다음 몸에는 .change(function(){ counter_radio(q#,INPUT'S_ID); });이 여러 개인 input type="radio"이 바인딩되어 있습니다. 이 기능 counter_radio()에 대한 코드입니다"reference"javascript에?

function counter_radio(q,id){ 
    if (q===false) { 
     q=true; 
     count++; 
     $("#counter").css("width", count); 
     $("#percent").text(count + "%"); 
    } 
    $("span#"+id).append(", "+q); 
    $("span#"+id).fadeIn(); 
} 

나는에 카운터가 한 번만 증가 기대 (첫 번째 시간은 세트에서 라디오를 선택한 경우). 그러나 input type=radio이 변경 될 때마다 카운터가 증가합니다. 내 문제는 q이 true를 반환하지만 q#은 false로 유지된다는 것입니다. PHP에서 qq#에 대한 참조이므로 q이 true로 설정된 경우 q#도 true로 설정됩니다. 자바 스크립트에서 그런 구조가 있습니까?

답변

1

다른 말처럼 부울과 같은 간단한 변수는 자바 스크립트에서 참조가 아닌 값으로 전달되므로 변경할 수있는 방법이 없습니다. 여러과 같은 변수가있는 경우

: 다음

var q0=false, q1=false, qX=false; 

를, 배열에 넣어하는 것이 더 쉬울 수 있습니다 그리고

var qArray = [false, false, false]; 

, 배열과 객체 방식으로 전달되기 때문에 원본을 수정할 수 있다면 배열과 인덱스를 함수에 전달하면 함수의 원래 데이터를 수정할 수 있습니다.

function counter_radio(q, index, id){ 
    if (q[index] === false) { 
     q[index] = true; 
     count++; 
     $("#counter").css("width", count); 
     $("#percent").text(count + "%"); 
    } 
    $("span#"+id).append(", " + q[index]); 
    $("span#"+id).fadeIn(); 
} 

counter_radio(qArray, 2, id); 
+0

owww, 좋은 아이디어! – jacob

1

네이티브 구문은 없지만 예 :

function counter_radio(q_,id){ 
    if (q_.ref===false) { 
     q_.ref=true; 
     count++; 
     $("#counter").css("width", count); 
     $("#percent").text(count + "%"); 
    } 
    $("span#"+id).append(", "+q); 
    $("span#"+id).fadeIn(); 
} 
+0

oooow 예! 지금은 '카운트'가 증가하지 않는 것을 제외하고는 :/ – jacob

3

당신은 당신의 바인딩 기능을 변경할 수 있습니다 :

.change(function(){ q# = counter_radio(q#,INPUT'S_ID); });

을하고 counter_radio 함수의 마지막에 return q;를 추가하기위한 객체를 사용합니다. 사용자가 양식을 제출하면

+0

고마워! 그것은 작동합니다 (하지만 간단한 함수 호출만큼 깨끗하지는 않습니다). – jacob

+1

'clean'을 원한다면 변수 이름으로 q1-q9를 사용하지 않도록 모든 것을 리 팩터해야합니다 : P – david

+0

이 기능적 접근 방식은 IMO 훨씬 더 우아하고 다른 제안 된 전역 개체 참조입니다. – Svend

0

나는 값을 수집합니다 : 당신이 모든 질문에 대답 한 사용자에게 경고하려면 jQuery validation plugin를 사용

jQuery('radio[name=...]:checked').val() 

.