Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Обработка значений из <FORM> (https://javascript.ru/forum/dom-window/80814-obrabotka-znachenijj-iz-form.html)

wrbanker 06.08.2020 17:14

Обработка значений из <FORM>
 
Приветствую!
На странице сайта пользователь вводит несколько значений разного типа. Это INPUT (type="number", type="date"), CHECKBOX и RADIO. Всего 15 различных значений. В коде HTML всё находится внутри одного тега FORM. Передать все значения для обработки в JS одним действием не получается. Не хватает знаний и опыта.
Прошу совета. Заранее благодарен.

Nexus 06.08.2020 17:21

Передайте в скрипт саму форму, а дальше скрипт вытащит из нее нужные поля. Можно даже не передавать форму, а скрипт сам получит её из DOM.

Пример 1:
<form onsubmit="callFunction(this);">
    <!-- some fields -->
</form>

<script>function callFunction(form) {
    const titleField = form.querySelector('[name="title"]');
}</script>


Пример 2:
<form id="special-form">
    <!-- some fields -->
</form>

<script>
    const form = document.querySelector('#special-form');
    form.addEventListener('submit', function (event) {
        const titleField = this.querySelector('[name="title"]');
    });
</script>

wrbanker 06.08.2020 17:31

Спасибо! Но момент передачи нужен - пользователь после введения всех значений жмет на кнопку "Получить документ" (input type="button"). И после этого этого значения передаются в JS и там обрабатываются.

Nexus 06.08.2020 17:49

wrbanker, измените тип кнопки с button на submit и слушайте событие формы submit (пример 2).

wrbanker 30.09.2020 17:34

Приветствую! На несколько недель пришлось отойти от темы, а по возвращению понял, что почти ничего не понял. Прочёл кучу документации, но на практике мало что получается.
Ниже код. Вот как раз из такого мне и надо, по нажатию на кнопку "Обработать", вытащить все значения, присвоить эти значения переменным и дальше с этими переменными работать. Допускаю, что в самом HTML-коде чего-то не хватает. Я в начале пути...

<form class="main-form" id="main-form">

        Число:
        <input class="input-number" type="number" name="main-number" id="main-number"> 
        Дата:        
        <input class="input-date" type="date" name="main-date" id="main-date">

        <ul>
            <li><input type="radio" name="radio-button" value="r-first" id="radio-first" class="radio-button">
            Радио 1</li>
            <li><input type="radio" name="radio-button" value="r-second" id="radio-second" class="radio-button">
            Радио 2</li>
        </ul>

        <ul>
            <li><input type="checkbox" name="chb-first" id="checkbox-first">
            Чекбокс 1</li>
            <li><input type="checkbox" name="chb-second" id="checkbox-second">
            Чекбокс 2</li>
        </ul>

        <input type="submit" value="Обработать">
</form>

laimas 30.09.2020 19:20

form.elements - вернет коллекцию всех элементов формы, обратиться конкретно каждому элементу в ней можно по индексу или по имени.

<form>
<input name="text" value="text" />
<input type="radio" name="radio" value="1" />
<input type="radio" name="radio" value="2" checked="" />
<input type="radio" name="radio" value="3" />
<input type="checkbox" name="checkbox1" value="1" />
<input type="checkbox" name="checkbox2" value="2" checked="" />
</form>

<script>
var elm = document.querySelector('form').elements;
alert(elm.text.value + '\n' + elm.radio.value + '\n' + elm.checkbox1.value)
</script>


Здесь получаются значения элементов формы, как обращение к ним по имени, причем значение группы кнопок (radio) будет равно значению выбранной кнопки, то есть можно получить сразу (radioNodeList.value). А вот если нужно получить значения выбранных флажков, то нужно сначала определить их.

wrbanker 01.10.2020 09:07

Спасибо. Сегодня попробую. А если всё-таки использовать addEventListener?

laimas 01.10.2020 09:32

Цитата:

Сообщение от wrbanker
А если всё-таки использовать addEventListener?

Вам что нужно? Я же в примере не использую никаких обработчиков, просто получаю форму, а у нее ее элементы.

wrbanker 01.10.2020 12:22

Цитата:

Сообщение от laimas (Сообщение 529357)
Вам что нужно? Я же в примере не использую никаких обработчиков, просто получаю форму, а у нее ее элементы.

Мне нужно, чтобы при клике на input (submit) JS отловил все значения из формы и присвоил эти значения переменным. В адресной строке я вижу пары имя=значение, но все мои неуклюжие попытки их поймать ничем не увенчались...

main-number=50&main-date=2020-01-11&radio-button=r-first&chb-first=on&chb-second=on

laimas 01.10.2020 12:44

Цитата:

Сообщение от wrbanker
Мне нужно, чтобы при клике на input (submit)

А это что не событие? А установка обработчика его это либо addEventListener, либо по иному если JQ.

Это main-number=50&main-date=2020-01-11&radio-button= .... отправляемые данные, чего в них копаться? Вам уже трижды сказали как получить поля и работать с ними.

wrbanker 01.10.2020 13:13

Спасибо. Вот код:

<form id="special-form">
        <input type="number" name="main-number"> 
        <input type="date" name="main-date">
        <ul>
            <li><input type="radio" name="radio-button" value="r-first"></li>
            <li><input type="radio" name="radio-button" value="r-second"></li>
        </ul>
        <ul>
            <li><input type="checkbox" name="chb-first"></li>
            <li><input type="checkbox" name="chb-second"></li>
        </ul>
        <input type="submit" value="Обработать">
</form>
             
    <script>
        const form = document.querySelector('#special-form');
        form.addEventListener('submit', function (event) {
            const tf_1 = this.querySelector('[name="main-number"]').value;
            const tf_2 = this.querySelector('[name="main-date"]').value;
            const tf_3 = this.querySelector('[name="radio-button"]').value;
            const tf_4 = this.querySelector('[name="chb-first"]').value;
            const tf_5 = this.querySelector('[name="chb-second"]').value;     
            alert (tf_1 + '\n' + tf_2 + '\n' + tf_3 + '\n' + tf_4 + '\n' + tf_5);
        });
    </script>


Значения number и date определяются. В radio, независимо от отметки, значение r-first. Оба checkbox, независимо от флажков, всегда on. Подскажите, в чём моя ошибка?

P.S: с checkbox разобрался: присваиваю нужное мне значение переменной через условное ветвление
const tf_5 = (this.querySelector('[name="chb-second"]').checked) ? 1 : 0;

laimas 02.10.2020 12:45

this.querySelector('[name="main-number"]')... в то время когда можно сразу получить this["main-number"], это к чему?

Если у флажка не определено значение, то оно по умолчанию будет равно "on", с этим значением выбранный флажок и будет отправлен на сервер. Не выбранные флажки на сервер не передаются.

Не знаю чего тут делается, но если не отменять значение по умолчанию формы event.preventDefault();, то она будет отправлена естественным образом.

gunthergeller 16.10.2020 14:21

There are 15 unique qualities ​​in complete. In HTML code, everything is contained inside one FORM tag. It is beyond the realm of imagination to expect to pass all the qualities ​​for handling in JS in one activity. Windscribe black friday vpn


Часовой пояс GMT +3, время: 11:10.