Как в одной форме уместить две кнопки, которые будут отрабатывать без перезагрузки?
принцип такой:
одна кнопка применяет значение, а вторая отправляет (для примера просто отображает alert). Сейчас отрабатывает только применение, потому что оно прописано в параметрах формы. Я попытался указать onsubmit непосредственно в button, однако у меня срабатывает перезагрузка страницы. Как реализовать без перезагрузки? https://jsfiddle.net/b5xf1pdg/1/ |
accountnujen,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .box { background: black; width: 50px; height: 50px; } </style> <script> document.addEventListener("DOMContentLoaded", function() { const style = document.querySelector(".box").style; document.querySelector("form").addEventListener("click", function({ target }) { let color = this.color.value; if (target.closest(".allow")) style.backgroundColor = color; if (target.closest(".send")) alert(color); }) }); </script> </head> <body> <form> <select name="color" id="color"> <option value="blue">blue</option> <option value="green">green</option> </select> <div class="box"></div> <button type="button" class="allow">allow</button> <button type="button" class="send">send</button> </form> </body> </html> |
рони,
удивлён. не думал, что единственный вариант - прослушивать все нажатия и выбирать только нужный. Хотел спросить. У меня идёт formdata. Я сделал вот так: body: new FormData(target.form) оно как бы работает, но я не уверен в .form. Это новое или старое обращение к форме? Просто перед тем как задать вопрос - пытался сам решить задачу и через submitter можно было это сделать, однако в спецификации указано, что это свежее нововведение (2019 года), поэтому я не стал его брать. Подскажите, .form можно использовать? |
Цитата:
ваши тоже рабочие, если их допилить. в данном случае обработчик клика повешен на форму и Function Expression, тогда форма будет в этой функции this. body: new FormData(this) target.form это в js издревле))), да можно использовать, если target элемент формы. |
accountnujen,
как пример одного из вариантов... <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .box { background: black; width: 50px; height: 50px; } </style> <script> document.addEventListener("DOMContentLoaded", function() { const style = document.querySelector(".box").style, form = document.querySelector("form"), btn = document.querySelector("[type='button']"); btn.addEventListener("click", function() { let color = this.form.color.value; style.backgroundColor = color; }) form.addEventListener("submit", function(event) { event.preventDefault(); alert(this.color.value); }) }); </script> </head> <body> <form > <select name="color" id="color"> <option value="blue">blue</option> <option value="green">green</option> </select> <div class="box"></div> <button type="button">allow</button> <button>send</button> </form> </body> </html> |
Часовой пояс GMT +3, время: 17:20. |