Я все еще изучаю JS и пытаюсь создать проверку формы. Я хотел бы нарисовать родительский элемент моего переключателя <p>
, если переключатель недействителен.
Я нашел свойство, чтобы найти parent
моего HTMLElement
: element.parentElement
Однако я не могу выбрать элемент <p>
с помощью radio.parentElement
. Вот мой упрощенный код:
window.onload = Init;
function Init() {
var formElement = document.forms.myform; //myform
var radio = formElement.radioName;
formElement.onsubmit = ProcessForm;
var
isFormValid = () => {
//validate if form is valid if not -> paint <p> red
if (
radio.value === null ||
radio.value === ""
) {
console.info(radio.parentElement); //(this is undefined. Why?)
radio.parentElement.backgroundColor = "red"; //(this does not work because it is undefined)
//Error:doubt.js:13 Uncaught TypeError: Cannot set properties of undefined (setting 'backgroundColor')
return false;
}
return true;
};
function ProcessForm(event) {
event.preventDefault();
if (isFormValid()) {
//do stuff
} else {
//do nothing
}
}
}
<!DOCTYPE html>
<html>
<head>
<script src = "./doubt.js"></script>
</head>
<body>
<form name = "myform" action = "#" method = "POST">
<p id = "caption_project">
Project Selection
<br />
<input type = "radio" name = "radioName" id = "id1" value = "1" />
<label for = "id1">1</label>
<br />
<input type = "radio" name = "radioName" id = "id2" value = "2" />
<label for = "id2">2</label>
<br />
</p>
<input id = "btnSubmit" type = "submit" />
</form>
</body>
</html>
Как выбрать элемент <p>
без изменения HTML-документа?
У вас есть более одного радиовхода с именем radioName
, поэтому formElement.radioName
не является входом; это сбор входных данных. Вы можете получить n-й ввод, указав его индекс, например formElement.radioName[0]
.
var formElement = document.forms.myform; //myform
var radio = formElement.radioName;
// first radio
console.info(radio[0].parentElement);
<form name = "myform" action = "#" method = "POST">
<p id = "caption_project">
Project Selection
<br />
<input type = "radio" name = "radioName" id = "id1" value = "1" />
<label for = "id1">1</label>
<br />
<input type = "radio" name = "radioName" id = "id2" value = "2" />
<label for = "id2">2</label>
<br />
</p>
<input id = "btnSubmit" type = "submit" />
</form>
Вы также можете просто запросить p
через селектор запросов:
// query the document for the id:
console.info(document.querySelector('#caption_project'));
// or the first p under the form:
console.info(document.forms.myform.querySelector('p'));
<form name = "myform" action = "#" method = "POST">
<p id = "caption_project">
Project Selection
<br />
<input type = "radio" name = "radioName" id = "id1" value = "1" />
<label for = "id1">1</label>
<br />
<input type = "radio" name = "radioName" id = "id2" value = "2" />
<label for = "id2">2</label>
<br />
</p>
<input id = "btnSubmit" type = "submit" />
</form>