Я пытаюсь создать простой бизнес-приложение JavaScript. Я написал JavaScript, чтобы в основном взять значение из входного элемента и передать его в несколько функций.
Я создал живой пример на CodePen, который вы можете посмотреть здесь: http://cdpn.io/hnBmD
Изменение: Код также расположен ниже?
Кажется, appendChild может удалить узел "li", который создает родительская функция? Может кто-нибудь, пожалуйста, дайте мне разумное объяснение этому?
Примечание. У меня есть JavaScript в отдельном файле, и он загружается непосредственно перед тегами тега body.
HTML:
<form>
<p><input type="text" id="inItemText" autofocus><button type="submit" id="submitButton">+</button></p>
</form>
<ul id="toDoList">
</ul>
JavaScript:
// Defining nodes.
var inItemText = document.getElementById("inItemText");
var submitButton = document.getElementById("submitButton");
// Once "enter" is pressed or click event is triggered, execute the function.
// The function below is basically checking the value of the input, to make sure the value is empty. If it isn't, it passes the value and the "ul" element node into the addNewItem function.
submitButton.onclick = function(){
var itemText = inItemText.value;
if (itemText == "" || itemText == " ") {
return false;
} else {
addNewItem(document.getElementById("toDoList"), itemText);
}
}
// Once the parameters are passed. This basically creates a "li" element, applies the value of the input element into the innerText of the "li" element created and then appends the "ul" with the "li" we just created. Also, it resets the value of the input so we can enter another checklist item in.
function addNewItem(list, itemText) {
var listItem = document.createElement("li");
listItem.innerText = itemText;
list.appendChild(listItem);
itemText = inItemText.value = "";
}
Спасибо!
Вам нужно вернуть false
из функции onclick
после вызова addNewItem
. В противном случае он отправит форму, которая перезагрузит страницу.
submitButton.onclick = function(){
var itemText = inItemText.value;
if (itemText == "" || itemText == " ") {
return false;
} else {
addNewItem(document.getElementById("toDoList"), itemText);
return false;
}
}
Или проще:
submitButton.onclick = function(){
var itemText = inItemText.value.trim();
if (itemText !== "" || itemText == " ") {
addNewItem(document.getElementById("toDoList"), itemText);
}
return false;
}
Или, как один из предложенных комментариев, избавиться от формы, тогда нечего подавать.
return false
используется в обработчике событий, чтобы предотвратить действие по умолчанию. В этом случае действие по умолчанию при нажатии на кнопку отправки - это отправить форму, и вы хотите предотвратить это.
Удалите форму, если это не необходимо, или просто запретите действие отправки формы по умолчанию.
submitButton.onclick = function (e) {
e.preventDefault();
var itemText = inItemText.value;
if (itemText == "" || itemText == " ") {
return false;
} else {
addNewItem(document.getElementById("toDoList"), itemText);
}
}
button
элемент в вашем HTML имеет type
атрибута submit
. Когда срабатывает событие клика, выполняется действие по умолчанию, которое должно отправить форму. Вам необходимо предотвратить это поведение по умолчанию.
var inItemText = document.getElementById("inItemText");
var submitButton = document.getElementById("submitButton");
submitButton.onclick = function(e){
e.preventDefault(); //prevent it from submitting
var itemText = inItemText.value;
if (itemText == "" || itemText == " ") {
return false;
} else {
addNewItem(document.getElementById("toDoList"), itemText);
}
}
function addNewItem(list, itemText) {
var listItem = document.createElement("li");
listItem.innerText = itemText;
list.appendChild(listItem);
}
e
это просто ссылка на объект они в объекте.
appendChild
никогда не должен ничего удалять, все, что он делает, это добавляет новый узел.