document.getElementById() всегда возвращает ноль

Я пытаюсь получить значение скрытого ввода из формы в моем HTML, используя javascript. Но, попробовав несколько разных способов получить значение, он всегда говорит в консоли (firebug), что переменная равна нулю. Вот javascript:

var mcq_test = form.mcq_test.value;
console.log("mcqid=" + mcq_test)
var mcq_num_questions = form.mcq_num_questions.value;
console.log("totalquestions=" + mcq_num_questions)
var x = 1;
var send = [];
send.push("mcq_test=");
send.push(mcq_test);

console.log("Send: " + send);

// have commented out the bits below...just go through them carefully looking at the string functions, put them in the send += (SRING 1 + STRING 2 + ...) format

for (var x = 1; x <= mcq_num_questions; x++) {
var questionidd = "mcq_question_id";
console.log("1 = " + questionidd);
var questionid = questionidd.concat(x); // mcq_question_id$ctr the question numer
console.log("2 = " + questionid);
var mcqid = form.questionid.value; // the questions id on db
console.log("3 = " + mcqid);
var answerr = "mcq_question";
var answer = answerr.concat(x); // mcq_question$ctr the questions chosen answer
var chosenanswer = form.answer.value; // the answers value
console.log("4 = " + chosenanswer);
var amp = "&";
var equal = "=";
var questionide = questionid.concat(equal); // "mcq_question_id$ctr="
var questionida = amp.concat(questionide); // "&mcq_question_id$ctr="
var answere = amp.concat(answer,equal); // "&mcq_question$ctr="
if (x = 1) { send.push(questionide, mcqid, answere, chosenanswer); }
else {
send.push(questionida, mcqid, answere, chosenanswer);
}
} 

Приставка:

[04:08:00.328] TypeError: questionID is null 
[04:08:00.327] My new function
[04:08:00.327] mcqid=566
[04:08:00.327] totalquestions=3
[04:08:00.327] Send: mcq_test=,566
[04:08:00.328] 1 = mcq_question_id
[04:08:00.328] 2 = mcq_question_id1

Форма:

echo"<input type=\"hidden\" name=\"mcq_question_id$ctr\" id=\"mcq_question_id$ctr\" value=\"$questionID\" form=\"SubmitTest\" />";

-- Обновлять

Ответ найден! Оказывается, вы не можете использовать синтаксис document.getElementByID() или form.variable.value; и поместите туда переменную, она должна быть строкой или написана так:

form[variable].value;

Я не нашел эквивалента для getElementById, но метод формы работает для меня.


person Omair Vaiyani    schedule 29.12.2012    source источник
comment
скажите мне, сколько вопросов на вашей странице, и опубликуйте весь код   -  person Manish Nagar    schedule 29.12.2012
comment
На этой странице 3, но это зависит от того, какой тест вы проходите - у нас есть тесты с до 100 вопросов, вы хотите, чтобы я опубликовал всю часть javascript или включил также html?   -  person Omair Vaiyani    schedule 29.12.2012
comment
немного больше информации сейчас, если это поможет @ManishNagar   -  person Omair Vaiyani    schedule 29.12.2012
comment
с какого значения вы начинаете свой $ctr при создании идентификатора типа ввода для вопросов   -  person Manish Nagar    schedule 29.12.2012
comment
удалить 'var' из for (var x = 1; x ‹= mcq_num_questions; x++), потому что 'x' уже объявлен   -  person Manish Nagar    schedule 29.12.2012
comment
Где в вашем коде вы вызываете document.getElementById()? Это предмет вашего вопроса, но его нет в вашем коде. Где вопрос ID? Тоже не смотри.   -  person skyline3000    schedule 29.12.2012


Ответы (2)


Вы должны убедиться, что DOM загружен, прежде чем пытаться получить к нему доступ. Поместите Javascript после HTML или настройте событие для запуска определения переменной.

person jeremy    schedule 29.12.2012
comment
Событие запускается кнопкой, этого достаточно или нужно еще что-то добавить? - person Omair Vaiyani; 29.12.2012
comment
Затем убедитесь, что перед тем, как нажать кнопку, элемент уже существует. - person luiges90; 29.12.2012
comment
Этого должно быть достаточно... что в $ctr? - person jeremy; 29.12.2012
comment
Я кратко упомянул в вопросе, что его число начинается с 1 и увеличивается на 1 каждый цикл для каждого вопроса на странице, присваивая каждому вводу другой идентификатор, например. mcq_question_id2 - person Omair Vaiyani; 29.12.2012
comment
@ luiges90 luiges90 Я не совсем понимаю, что вы имеете в виду, элемент определенно находится на странице, и я жду, пока страница загрузится, прежде чем пытаться - person Omair Vaiyani; 29.12.2012
comment
При просмотре исходного кода страницы вы можете нажать CTRL+F и найти элемент с идентификатором mcq_question_id1? - person jeremy; 29.12.2012
comment
yup нашел это ‹input type=hidden name=mcq_question_id1 id=mcq_question_id1 value=8068 form=SubmitTest /› и по одному для каждого из вопросов на странице - person Omair Vaiyani; 29.12.2012
comment
да, здесь mycqs.com/ mcqs/Computer+Science/Information+Technology/A-Z+Unix/ прокрутите вниз, первая кнопка «отметить» работает, но я пытаюсь сделать тестовую отметку через ajax, используя эту вторую кнопку - person Omair Vaiyani; 29.12.2012
comment
@OmairVaiyani - я не могу воссоздать ошибку, о которой вы сообщаете - person jeremy; 29.12.2012

при использовании этого

echo"<input type=\"hidden\" name=\"mcq_question_id$ctr\" id=\"mcq_question_id$ctr\" value=\"$questionID\" form=\"SubmitTest\" />";

здесь, прежде чем создавать тип ввода, убедитесь, что ваш «$questionID» не равен нулю

используйте это, затем проверьте

echo"<input type=\"hidden\" name=\"mcq_question_id$ctr\" id=\"mcq_question_id$ctr\" value=\"questions\" form=\"SubmitTest\" />";
person Manish Nagar    schedule 29.12.2012
comment
Код, который я показал, был частью более длинной функции. Если я воспользуюсь этой функцией, смогу ли я поместить ее в свою другую функцию? - и да, типы ввода начинаются с mcq_question_id1 - person Omair Vaiyani; 29.12.2012
comment
$questionID не равен нулю, и он не может быть нулевым, потому что без него вопрос не появится. - person Omair Vaiyani; 29.12.2012