Loop javascript kullanarak dinamik php ile oluşturulan denetimleri

2 Cevap php

Tamam, bu durum yine de biraz garip ama. Bu PHP kodu birkaç Radiobutonlar oluşturur:

    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 />';
    }

Tamam, bu onay kutularını oluşturulduktan sonra, bütün radyo düğmeleri almak için bazı kod çalıştırmak için çalışıyorum ve işe yaramadı, bu yüzden sadece tek bir radyo düğmesine birkaç kez alma denedim ve sadece alır, gayet iyi çalışıyor İlk kez.

function Validate()
{

	var i = 1;

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

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

	document.writeln('out of loop');

	return false;
}

Yani 'radioButtonAnswer2' var ve boş olmamalı emin biliyorum. Ama bu teslim düğmesine tıkladığınızda ne olsun:

false true true true döngünün dışında true

İlk kez boş değil, bundan sonra, öyle. Herhangi bir düşünce?

Teşekkürler!

2 Cevap

Eğer üreten HTML geçersiz olduğu için olabilir. Ayrıca açıkça __get() işlevini çağırarak olmamalı, ama bu büyük olasılıkla alakasız bir mesele.

Gibi bir şey:

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

Bir radyo düğmesi tanımlamak için doğru bir yol değildir.

Bu kodu deneyin:

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>';
}


Edited to add: Ah, şimdi görüyorum. Kullandığınız document.writeln(). Bu fonksiyon sayfanın içeriğinin üzerine yazar.

Yani döngü içine ilk kez, eleman var yok, ve bu sayfaya "gerçek" yazar document.writeln() çağrıyı yapar. This overwrites everything that was on the page before (Eğer sayfa yüklendiğinde, only javascript çıkışı vardır nasıl zaman fark etmedi?). Döngünün bir sonraki sefer, tekrar radyo düğmesi için bakmaya çalışır, ama sildim ve javascript çıkışı ile yerini duruyor. Şimdi artık yok.

Sen document.getElementsByName("group") tüm radyo düğmeleri almak için kullanabilirsiniz.

Bu döngü çalışıyor. Sorunlar (), bu sayfadaki html değiştirir ve bu nedenle DOM öğeleri gitti document.writeln ile. İşte yerine Uyarısı kullanarak güncelleştirilmiş bir sürümü.

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;
}