2009-05-15 2 views
1

좋아,이 상황은 조금 어색하지만 어쨌든.javascript를 사용하여 PHP로 동적으로 생성 된 컨트롤을 루프

for($i = 0; $i<count($questionList); $i++) 
    { 
     echo $questionList[$i]->__get(QuestionId).'-'.$questionList[$i]->__get(QuestionText).'<br />'; 

     $answerList = $questionList[$i]->GetAnswers(); 

     for($j = 0; $j<count($answerList); $j++) 
     { 
      echo '<br /><input type=\'radio\' name=\'group'.$i.'\' id=\'radioButtonAnswer'.$answerList[$j]->__get(AnswerId).'\' value=\''.$answerList[$j]->__get(AnswerId).'\' >'. 
      $answerList[$j]->__get(AnswerText).'</input>'; 
     } 
     echo '<br /><br />'; 
    } 

좋아, 잘 작동하는, 체크 박스를 만든 후, 나는 모든 라디오 버튼을 얻기 위해 몇 가지 코드를 실행하기 위해 노력하고있어 그것이 작동하지 않았다, 그래서 나는 노력이 PHP 코드는 여러 개의 라디오 버튼을 생성 하나의 라디오 버튼을 여러 번 가져 오는 것만으로도 처음으로 가져옵니다.

function Validate() 
{ 

    var i = 1; 

    do 
    { 
     document.writeln(document.getElementById('radioButtonAnswer2') == null); 

     i ++; 
    }while(i < 10); 

    document.writeln('out of loop'); 

    return false; 
} 

그래서 'radioButtonAnswer2'가 존재하며 null이 아니어야합니다. 그러나 이것은 내가 제출 버튼을 클릭 할 때 내가 무엇을 얻을 수 있습니다 :

거짓 사실 사실 사실 사실 사실 루프

처음으로 중 진정한 진실이 null이 아니라 그 후, 그것이 사실. 이견있는 사람?

감사합니다.

+0

PHP가 출력하는 HTML 코드 스 니펫을 추가 할 수 있습니까? 모든 것이 제대로 나오는지 확인하기 만하면됩니다. –

+0

물론 여기 들로는
<="radioButtonAnswer4 "레이블>입니다 radioButtonAnswer1 "> 응답 1

Carlo

+0

답변이 업데이트되어 원인을 찾았습니다. –

답변

1

생성하는 HTML이 유효하지 않을 수 있습니다. 또한 명시 적으로 __get() 함수를 호출해서는 안되지만 관련성이없는 문제 일 가능성이 큽니다. 같은

뭔가 :

<input type="radio" ...>Label Text</input> 

는 라디오 버튼을 정의하는 올바른 방법이 아닙니다.

이 코드를보십시오 :

for($j = 0; $j<count($answerList); $j++) 
{ 
     echo '<br /><input type="radio" name="group'.$i.'" id="radioButtonAnswer'.$answerList[$j]->AnswerId.'" value="'.$answerList[$j]->AnswerId.'" />'; 
     echo '<label for="radioButtonAnswer'.$answerList[$j]->AnswerId.'">'.$answerList[$j]->AnswerText.'</label>'; 
} 

편집 추가 : 아, 지금은 참조하십시오. document.writeln()을 사용 중입니다. 이 함수는 페이지의 내용을 덮어 씁니다.

처음으로 루프가 시작될 때 요소가 존재하며 페이지에 "true"를 쓰는 document.writeln() 호출을 수행합니다. 전에 페이지에 있던 모든 내용을 덮어 씁니다 (페이지가로드되는 방식을 알지 못했습니까? 에만에 javascript 출력이 있습니까?). 다음에 루프를 통과 할 때 라디오 버튼을 다시 찾 으려고하지만 지워지고 자바 스크립트 출력으로 바뀝니다. 이제 더 이상 존재하지 않습니다.

+0

나는 원래의 자바 스크립트 코드로 이것을 시도했지만 여전히 가지고있다. 거짓 거짓 사실 진정한 사실 진정한 사실 진정한 사실 없음 – Carlo

+0

흠, 다른 문제를 찾아 볼 것이지만, 당신은 가지고 있던 것 대신이 버전을 사용해야한다. 상관 없어요. 비슷한 일을하는 코드의 다른 부분도 수정해야합니다. –

+0

제안 해 주셔서 감사합니다. 그것은 더 나은 연습처럼 보이고 코드를 더보기 좋게 만듭니다. 도움을 많이 주셔서 감사합니다. 설문 조사에서 응답의 유효성을 확인하는 것이 매우 쉽다고 생각했습니다. – Carlo

2

document.getElementsByName("group")을 사용하면 모든 라디오 버튼을 사용할 수 있습니다.

이 루프는 정상적으로 작동합니다. document.writeln() 문제는 페이지의 html을 대체하므로 DOM 요소가 없어졌습니다. 대신 Alert를 사용하는 업데이트 된 버전이 있습니다.

function Validate(){ 
    var radioGroup = document.getElementsByName("group"); 
    var results = ""; 
    for(i = 0, len = radioGroup.length; i < len; i++){ 
    currentRadio = radioGroup[i]; 
    results += "\n" + currentRadio.id + " is "; 
    results += (currentRadio.checked ? "checked" : "not checked"); 
    } 
    results += "\n..out of loop..."; 
    alert(results);  
    return false; 
} 
+0

행운을 빕니다. "out of loop"에 도달하지 않아도 양식의 작업 페이지로 이동합니다. – Carlo

+0

"var radioGroup ="다음에 함수에 여분의 행을 추가했습니다. 을 radioGroup var에가 null이며, 루프가 작동합니다 그래서! 아니지만, 그것은 심지어 그것을 얻을하지 않습니다 찾습니다 기능의 validate() \t \t \t { \t \t \t var에을 radioGroup = 문서를. getElementsByName ("group1"); \t \t \t \t \t \t document.write를는 ('널 (NULL)'+을 radioGroup == NULL) 용 \t \t \t \t \t \t (I = 0, = LEN radioGroup.length 나는 렌 <; 내가 ++) //이 \t \t \t 할 표시 그다지; \t \t \t \t { \t \t \t document.write를는 (ⅰ '루프 회'+) cument.writeln (radioGroup [i] .checked); \t \t \t} \t \t \t document.writeln ("out of loop"); \t \t \t false를 반환합니다. \t \t \t} – Carlo

+0

카를로, 내 업데이트 된 코드를 사용해주세요. 나는 결과에 매우 만족할 것이라고 생각합니다. –

관련 문제