Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Поменять значение "на лету" в форме


Автор: V0fka 9.6.2013, 20:40
Привет!

Есть такая форма:

Код

<html>
                        <body>
                            <script type="text/javascript">
                                function submit(status)
                                {
                                    var element = document.getElementById("status");
                                    element.value = status;
                                }
                            </script>

                            Первый шаг мастера
                            <form action="index.php" method="post">
                                <input id ="status" type="hidden" value="">
                                <input onclick ="submit(0);" name="nextButton" type="submit" value="<< Назад">
                                <input onclick ="submit(1); ;" name="previousButton" type="submit" value="Вперед >>">
                            </form>
                        </body>
                    <html>


Я хочу, чтобы перед отправкой данных обработчику, в форме устанавливалось значение элемента "status", в зависимости от нажатой кнопки и чтобы потом в обработчике формы словить это значение как $_POST['status'] и что-то с ним делать. Но что-то эффекта никакого. Подскажите, пожалуйста, как это сделать?

Автор: Arantir 9.6.2013, 21:04
Значение submit тоже передается при отправке, ведь это тоже input.
Чтобы определить кнопку, не обязательно прикручивать Javascript, достаточно проверить, какое из значений передалось в скрипт:
Код
<?php

if (isset($_POST['nextButton']) { // отправлаено кнопкой "<< Назад"

} else if (isset($_POST['previousButton'] { // отправлаено кнопкой "Вперед >>"

}

Автор: V0fka 10.6.2013, 16:44
Arantir, спасибо за ответ, но меня все же интересует как сделать именно так, как я описал в первом посте smile . Отчасти, интерес академического характера.

Автор: ksnk 10.6.2013, 17:30
V0fka, У input с именем status нет имени, поэтому никакого значения на сервер не передается.

Автор: Arantir 10.6.2013, 17:43
V0fka, так же, как делается в других случаях взаимодействия пользователя с элементами — с помощью событий.
Код

document.getElementById('my_form').onsubmit = function() {
   // ...
}

Вызывается при каждой попытке отправить форму (нажатие на submit, клавиша Enter при вводе в поле, вызов submit() из JS...).
Функция выполняется перед отправкой данных. То есть, все изменения полей формы будут учтены. 
Если она вернет false, то отправка будет отменена (полезно, например, для проверки корректности данных).

Автор: Amphiluke 10.6.2013, 19:41
@V0fka
Вы обратили внимание, что объявленная вами функция submit не вызывается совсем? ) Дело в том, что в обработчики событий на элементах форм содержат в цепи областей видимости еще дополнительные объекты, имеющие отношение к самой форме. Так, известно, что объекты формы (HTMLFormElement) наследуют из своего прототипа нативный метод под названием submit, который занимается программной отправкой формы. Когда вы из обработчика события click на кнопке вызываете функцию submit, осуществляется просмотр цепи областей видимости в поисках этой функции. В порядке просматриваемых объектов область видимости объекта формы стоит ближе, чем глобальная область видимости, поэтому нативный метод submit находится раньше, чем ваша функция, и поиск прекращается.

На самом деле, эту особенность в далеком 2008 упоминал еще Дмитрий Сошников, см. http://javascript.ru/forum/misc/5329-malenkijj-test-konflik-imjon.html.

Желательно вообще не называть элементы форм и глобальные функции именами, совпадающими с названиями нативных методов типа submit и т.д., дабы избежать впоследствии вот таких неочевидных багов.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51b4be706ccc197359000002#findElement_E7045_51b601bf6ccc19a52100147c_0

Автор: V0fka 11.6.2013, 20:45
Друзья, спасибо за ответы! Я на досуге покручу все это, с учетом того, что вы мне подсказали и отпишу.

Автор: V0fka 12.6.2013, 11:35
ksnk, понял, спасибо!

Arantir, возьму на вооружение, спасибо!

Amphiluke,
Цитата(Amphiluke @  10.6.2013,  19:41 Найти цитируемый пост)
Вы обратили внимание, что объявленная вами функция submit не вызывается совсем?

Обратил... после того, как прочитал ваше сообщение smile . Вам так же спасибо за замечание и совет, прийму к сведению!

В общем, всем ещё раз спасибо smile ! Получилось, что хотел.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)