Кроме того, что мое краткое исследование говорит мне, что последнее вернет коллекцию, а не один элемент с переданным идентификатором.
Рассмотрим следующий код:
function validateAllFields()
{
var clientid = document.getElementById("clientid");
var programs = document.getElementById("programs");
var startmonth = document.getElementById("startmonth");
var startday = document.getElementById("startday");
var startyear = document.getElementById("startyear");
var completed = document.getElementsByName("completed");
var goals = document.getElementsByName("goals");
var errors = document.getElementById("errorMsg");
errors.innerHTML = "";
if(isNumeric(clientid, errors, "Please enter a valid client ID")){
if(madeSelection(programs, errors, "Please select a program from the drop-down list")){
if(madeSelection(startmonth, errors, "Please enter a month for the start date")){
if(madeSelection(startday, errors, "Please enter a day for the start date")){
if(madeSelection(startyear, errors, "Please enter a year for the start date")){
if(checked(completed, errors, "Please choose an option that indicate whether the client has completed the program")){
if(checked(goals, errors, "Please choose an option that indicate whether the client has met his/her goals.")){
window.alert("GOT IN TO RETURN TRUE");
return true;
}
}
}
}
}
}
}
return false;
}
</script>
Приведенный выше код отлично работает после размещения его в обработчике onsubmit формы. Однако раньше для элементов (программ, startmonth, startday, startyear) я использовал getElementsByName(), произошло следующее:
- Кажется, что код попадает во вторую строку if if if (madeSelection (programs.... ", и на короткую секунду он отображает сообщение об ошибке через innerHTML и
- Приступил к отправке формы AS IF, если бы JS действительно вернулась. Как вы можете сказать, перед возвратом true появляется всплывающее предупреждение, и всплывающее окно DID NOT появляется вообще.
- Плохие данные были отправлены в тестовую базу данных, потому что форма не была проверена. (но для написания серверной проверки с этой формой, но я буду).
предположим, что программы, startmonth, startday , а startyear - выпадающие списки с те же идентификаторы и имена.
Кроме того, функция madeSelection задается как:
function madeSelection(element, error, msg) {
if (element[0].value == "none" || element[0].valueOf == "none" || element[0].value == "") {
error.innerHTML = msg;
element.focus();
return false;
} else {
return true;
}
}
Мой код работает прямо сейчас после того, как я изменил эти элементы для использования getElementById(), мне просто интересно, почему getElementsByName представил такое поведение.