Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поменять значение "на лету" в форме 
:(
    Опции темы
V0fka
Дата 9.6.2013, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Привет!

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

Код

<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'] и что-то с ним делать. Но что-то эффекта никакого. Подскажите, пожалуйста, как это сделать?
PM MAIL   Вверх
Arantir
Дата 9.6.2013, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



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

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

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

}



--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
V0fka
Дата 10.6.2013, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Arantir, спасибо за ответ, но меня все же интересует как сделать именно так, как я описал в первом посте smile . Отчасти, интерес академического характера.
PM MAIL   Вверх
ksnk
Дата 10.6.2013, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



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


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Arantir
Дата 10.6.2013, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



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

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

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


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Amphiluke
Дата 10.6.2013, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



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

На самом деле, эту особенность в далеком 2008 упоминал еще Дмитрий Сошников, см. этот топик.

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

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM   Вверх
V0fka
Дата 11.6.2013, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Друзья, спасибо за ответы! Я на досуге покручу все это, с учетом того, что вы мне подсказали и отпишу.
PM MAIL   Вверх
V0fka
Дата 12.6.2013, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



ksnk, понял, спасибо!

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

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

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

В общем, всем ещё раз спасибо smile ! Получилось, что хотел.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.