Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Главная кнопка submit
 
 автор: Osipov   (21.06.2007 в 22:47)   письмо автору
 
 

У меня в форме несколько кнопок <input type=submit>. Мне нужно сделать, чтобы при нажатии на Enter внутри формы, она отправлялось по конкретной кнопке.

   
 
 автор: CNT   (21.06.2007 в 22:55)   письмо автору
 
   для: Osipov   (21.06.2007 в 22:47)
 

Подумайте и попробуйте ещё раз сформулировать свой вопрос - что вам реально надо получить при сабмите формы.
Если у вас внутри формы будет тысяча и одна кнопка <input type="submit">, при нажатии на любую из них данные формы отправятся по одному и тому же адресу - который в единственном числе указан в атрибуте ACTION тега <form>

   
 
 автор: Osipov   (21.06.2007 в 22:58)   письмо автору
 
   для: CNT   (21.06.2007 в 22:55)
 

У данных будет дополнительный параметр, ключ которого --- параметр name нажатой кнопки, а значение --- её value. Поэтому по данным можно определить, какая именно кнопка была нажата для отправки (если у них разные параметры name)

   
 
 автор: CNT   (21.06.2007 в 23:23)   письмо автору
 
   для: Osipov   (21.06.2007 в 22:58)
 

Если у каждой кнопки имеется атрибут NAME, то в потоке вывода будет столько пар name=value, сколько кнопок с разными именами у вас будет прописано в форме. М.б. есть смысл атрибут NAME для каждой кнопки, наоборот, не прописывать, а кнопкам назначить обработку события ONCLICK = "this.name = 'уникальное_имя_кнопки';"> - тогда в потоке вывода будет всего одна пара name=value, имеющее первым элементом пары уникальное_имя_кнопки, которую юзер нажал.

   
 
 автор: Osipov   (21.06.2007 в 23:50)   письмо автору
 
   для: CNT   (21.06.2007 в 23:23)
 

Проверил практически только что и много раз использовал в своих страницах --- для IE и Мозилы это не так --- остаётся только поле для нажатой клавиши.

И вообще, довольно часто на разных сайтах встречается несколько кнопок в форме, пожтому я подозреваю то что это соответствует стандарту HTML.

В любом случае, меня интересует не это, а как сделать, чтобы пользователь отправлял определённой кнопкой при нажатии на Enter в пределах формы --- до сих пор получается, что работает первая кнопка в форме.

   
 
 автор: CNT   (22.06.2007 в 01:57)   письмо автору
 
   для: Osipov   (21.06.2007 в 23:50)
 

Хм... по-моему я понял вашу проблему.

В документации MSIE указано (цитирую): If the form includes only one text box and the user presses ENTER, the onsubmit event fires. If the form has an INPUT type=submit element, it will appear as a button with a dark border, which indicates the user can press ENTER to submit the form, что переводится приблизительно так: при наличии в форме только одного поля <input type="text">, VALUE которого может быть изменено юзером интерактивно (т.е. при помощи мыши и/или клавиатуры) нажатие клавиши ENTER приводит к сабмиту формы.
При этом для сабмита необходимо выполнение условия - это единственное текстовое поле формы должно в момент нажатия ENTER иметь фокус.
И при этом, если в форме имеется кнопка <input type="submit">, то эта кнопка в момент получения текстовым полем фокуса всего лишь обводится чёрной рамкой, что должно показать юзеру: "нажмешь ENTER - будет сабмит".
Т.е. фактически кнопка <input type="submit"> никоим образом не получает фокуса, она никоим образом не "псевдонажимается"... она всего лишь визуально выделяется.

Да, если кнопок <input type="submit"> в форме несколько, то визуально выделяется первая (по местонахождению в HTML-коде) из этих кнопок. Но опять же - только выделяется, и только визуально. Никакие программные действия при этом не происходят, программно отследить это выделение, отменить его, или перенести его на, например, вторую кнопку <input type="submit"> из нескольких имеющихся - нельзя.

Таким образом, ваша фраза - "работает первая кнопка" - неверна. Фактически при нажатии ENTER не работает ни одна из кнопок <input type="submit">, одна из них всего лишь "одевает траур".

   
 
 автор: Osipov   (22.06.2007 в 09:24)   письмо автору
 
   для: CNT   (22.06.2007 в 01:57)
 

В этой цитате ничего не сказано про несколько кнопок.

ОПС! прошу прощения! Для IE действительно нет никакого данного кнопок при нажатии Enter, а вот для Мозилы есть! То есть у мозилы передаются данные при нажатии Enter, как если бы была нажата первая кнопка, и нажатие Enter никак нельзя отлечить от нажатия первой кнопки: вот пример http://poetry.mooo.com/test.php

Ладно, так и быть, я пожертвовав дизайном сделаю главную кнопку первой, чтобы работало на всех браузерах, но вопрос остаётся открытым --- для Мозилы и других браузеров.

   
 
 автор: CNT   (22.06.2007 в 13:57)   письмо автору
 
   для: Osipov   (22.06.2007 в 09:24)
 

Интересно...

1. В MSIE при нажатии клавиши ENTER визуально выделяется первая по коду кнопка <input type="submit">, но в потоке вывода никаких пар "имя_кнопки=надпись_на_кнопке" не передается.

а) Выделение первой по коду кнопки - никому не нужный бред.
б) А вот отсутствие данных о кнопке в потоке вывода абсолютно правильно - ведь кнопку-то не нажимали.

2. В FireFox при нажатии клавиши ENTER никакого визуального выделения не происходит, однако в потоке вывода появляется пара "имя_кнопки=надпись_на_кнопке" первой по коду кнопки <input type="submit">.

а) отсутствие выделения - правильно (ибо причём тут кнопка, когда курсор находится в текстовом поле).
б) передача первой по коду пары "имя_кнопки=надпись_на_кнопке" является бредом ибо фактически кнопку не нажимали - зачем нам передавать данные о существовании неработавшей кнопки?

3. В Opera ещё смешнее - при нажатии клавиши ENTER визуально выделяется ближайшая по коду к текстовому полю кнопка и она же передается в потоке вывода.

а) бред
б) бред

Выводы:
Первый - идеальных браузеров не бывает.

Второй - Opera является самым "смешным" браузером.

Третий - чтобы добиться кроссбраузерности, в форме не следует вообще использовать кнопки <input type="submit">, а следует заменить их кнопками <input type="button" value="уникальная_надпись">. Кроме того, в форму надо ввести скрытое поле <input type="hidden" name="why" value="enter">, а на каждую кнопку <input type="button" value="уникальная_надпись"> повесить обработчик onclick="with (this) {form.why.value = value; form.submit ()}"

Вот тогда:
а) ничего нигде сдуру визуально выделяться не будет;
б) в потоке вывода всегда будем иметь пару "why=что-то", и переданное "что-то" будет точно свидетельствовать - каким образом клиент просабмитил форму.

<form>
<input type="hidden" name="why" value="enter">
<input type="button" onclick="with (this) {form.why.value = value; form.submit ()}" value="btn1">
<input type="button" onclick="with (this) {form.why.value = value; form.submit ()}" value="btn2">
<input type="text" name="textfield">
<input type="button" onclick="with (this) {form.why.value = value; form.submit ()}" value="btn3">
<input type="button" onclick="with (this) {form.why.value = value; form.submit ()}" value="btn4">
</form>

   
 
 автор: Osipov   (23.06.2007 в 22:02)   письмо автору
 
   для: CNT   (22.06.2007 в 13:57)
 

Да, у вас всё правильно написано, вот ещё один бред:
В Firefox выделением можно управлять с помощью параметра default в теге --- никаких других эффектов, кроме чёрной рамки у этого параметра замечено не было.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования