Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.216.251.37] |
|
Сообщ.
#1
,
|
|
|
Ситуация следующая:
<form ... onSubmit="return validate(this);"> ... <input name="Create" type="submit" value="Создать"> <input name="Delete" type="submit" value="Удалить"> </form> Так вот, как в функции validate определить какую кнопку нажали? |
Сообщ.
#2
,
|
|
|
Неправильный подход к решению вопроса. Лучше создать кнопки button с разными обработчиками, и в них form.submit() вызвать автоматически:
<form name="the_form" ...> <input type="button" name="create" value="Создать" onClick="create()"> <input type="button" name="delete" value="Удалить" onClick="delete()"> </form> Так что выкладывай задачу (и код ф-и validate) полностью, для получения конечного результата |
Сообщ.
#3
,
|
|
|
Trustmaster, а так?
Вариант #1. <form ... onSubmit="return validate(this, btn);"> <script>var btn;</script> ... <input name="Create" type="submit" value="Создать" onclick="btn = 'create'" /> <input name="Delete" type="submit" value="Удалить" onclick="btn = 'delate'" /> </form> В итоге передастся вторым параметром обзЫвание кнопки. Вариант #2 <form ... onSubmit="return validate(this, document.getElementById('btn').value);"> <input type="hidden" name="btn" value="" id="btn" /> ... <input name="Create" type="submit" value="Создать" onclick="document.getElementById('btn').value = 'create'" /> <input name="Delete" type="submit" value="Удалить" onclick="document.getElementById('btn').value = 'delete'" /> </form> Результат в принципе тот-же, но и скрипту передасться "кличка" кнопки. |
Сообщ.
#4
,
|
|
|
Ну тогда уж
<form ... onSubmit="return validate(this);"> ... <input name="Create" type="submit" value="Создать" onclick="var btn = 'create';" /> <input name="Delete" type="submit" value="Удалить" onclick="var btn = 'delate';" /> ... </form> btn объявлена в глобально области видимости и видна из validate(). |
Сообщ.
#5
,
|
|
|
Trustmaster, чужой код надо читать внимательно
Смотри вариант №1, строка №2 А глобальные переменные в функциях нелюблю использовать |
Сообщ.
#6
,
|
|
|
Читал внимательно Просто так, имхо, короче. А вообще, тут от предпочтения salaga'и зависит, и от того, какую задачу эта функция решает. Мне интуиция подсказывает, что неправильным путем пошли товарищи
|
Сообщ.
#7
,
|
|
|
Спасибо, за совет. Я наверное, не так попросил
Есть ли какое-нибудь свойство, например - у кнопки-submit, указывающее на нажатие. По идее, отправляемые данные формы содержат запись вида "Create"=>"Создать", если нажата кнопка Create: можно посмотреть там. Но вот где они хранятся? Цитата Trustmaster, 10.09.04, 19:11 Так что выкладывай задачу (и код ф-и validate) полностью, для получения конечного результата Суть в том, чтобы данные отправленные формой содержали запись о кнопке и чтобы ф-ия validate спросила: "А надо-ли?" Отправляю post'ом. |
Сообщ.
#8
,
|
|
|
То есть о названии кнопки нужно сообщить скрипту?
Чтобы validate спросила, надо ли отправить форму, делаем так: <script>function validate(obj) { // ... return confirm('Надо ли отправлять форму?'); }</script> <form ... onSubmit="return validate(this);"> ... <input name="Create" type="submit" value="Создать"> <input name="Delete" type="submit" value="Удалить"> </form> А вот насчет передачи name кнопки submit я не уверен. На каком языке скрипт-обработчик? |
Сообщ.
#9
,
|
|
|
На PHP. Но ведь не принципиально на чем обработчик, главное то, что передалось, сами данные. Т.е. все определяется на стороне клиента. Интересно как отправляет данные форма?
Кстати, спасибо, что стараешься помочь. |
Сообщ.
#10
,
|
|
|
Как отправляет данные форма? Сначала вебсерверу, а тот - скрипту через стандартный поток ввода (это методом POST). При этом аттрибуты name становятся именем переменной, а значение поля - значением переменной. На сколько мне известно, поля типа submit не отправляются, поэтому чтобы узнать, с какой же кнопки форму послали, функции validate придется задать значение hidden поля:
<script>function validate(obj, btn) { // ... document.forms['the_form'].item('submit_btn').value = btn; if(confirm('Надо ли отправлять форму?')) { document.forms['the_form'].submit(); } }</script> <form name="the_form" ...> ... <input type="hidden" name="submit_btn" value="" /> <input name="Create" type="submit" value="Создать" onclick="validate(this, 'create')" /> <input name="Delete" type="submit" value="Удалить" onclick="validate(this, 'delete')" /> ... </form> PHP-скрипт получит переменную $_POST['submit_btn'] (и $submit_btn при register_globals = On), содержащую имя кнопки. |
Сообщ.
#11
,
|
|
|
Цитата Trustmaster, 11.09.04, 14:07 На сколько мне известно, поля типа submit не отправляются Еще как оптравляются Слушай: <form method="post"> <input type="submit" name="Create" value="Создать"> <input type="submit" name="Delete" value="Удалить"> </form> Обработчик: print_r($_POST); Вывод: Array { [Create] => Создать } Отправилась только нажатая кнопка. Ничего не передастся, если в onClick вставить self.submit(); Мне не нравится вводить новые переменные, если есть старые. Где то же записывается, что отправит форма вебсерверу? Т.е. записывается, что будет отправлен "Create" или не будет. |
Сообщ.
#12
,
|
|
|
Научись задавать вопросы по-нормальному, OK? А то первые несколько минут приходится въезжать, что же такое ты спрашиваешь.
Насколько я понял, на этот раз ты хочешь, чтобы за все отвечала одна переменная? Нет проблем: <form method="post"> <input type="submit" name="submit_action" value="Создать"> <input type="submit" name="submit_action" value="Удалить"> </form> А если тебе надо узнать, что одна кнопка была нажата, а другая нет, то тут уж submit точно не подойдет. Тогда в любом случае придется воспользоваться button + javascript: <script>function validate(obj, btn) { // ... if(btn == 'create') document.forms['the_form'].item('Create').value = 'Yes'; else document.forms['the_form'].item('Delete').value = 'Yes'; if(confirm('Надо ли отправлять форму?')) { document.forms['the_form'].submit(); } }</script> <form name="the_form" ...> ... <input type="hidden" name="Create" value="No" /> <input type="hidden" name="Delete" value="No" /> <input type="submit" value="Создать" onclick="validate(this, 'create')" /> <input type="submit" value="Удалить" onclick="validate(this, 'delete')" /> ... </form> |