Использование JavaScript для зацикливания динамически созданных элементов управления с php - PullRequest
1 голос
/ 15 мая 2009

Хорошо, эта ситуация немного странная, но в любом случае. Этот код 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 />';
    }

Хорошо, это работает нормально, после того, как флажки созданы, я пытаюсь запустить некоторый код, чтобы получить все переключатели, и это не сработало, поэтому я попытался просто получить несколько переключателей несколько раз получает это в первый раз.

function Validate()
{

    var i = 1;

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

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

    document.writeln('out of loop');

    return false;
}

Так что я уверен, что 'radioButtonAnswer2' существует, и он не должен быть нулевым. Но вот что я получаю, нажимая кнопку «Отправить»:

false true true true true true true true true true вне цикла

Первый раз не равен нулю, но после этого он есть. Есть мысли?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 мая 2009

Вы можете использовать document.getElementsByName("group"), чтобы получить все переключатели.

Этот цикл работает нормально. Проблемы с document.writeln (), он заменяет HTML на странице, и поэтому элементы DOM исчезли. Вот обновленная версия, использующая вместо этого оповещение.

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;
}
1 голос
/ 15 мая 2009

Это может быть связано с тем, что генерируемый вами 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(). Эта функция перезаписывает содержимое страницы.

Таким образом, первый раз в цикле элемент существует, и он выполняет document.writeln() вызов, который записывает «true» на страницу. Это перезаписывает все, что было на странице до (разве вы не заметили, как при загрузке страницы она только выводит JavaScript?). В следующий раз в цикле он снова попытается найти переключатель, но он был удален и заменен выводом javascript. Теперь его больше нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...