Как кнопка отправки по умолчанию на HTML-форме определена?

По сути, я бы хотел добавить Даффимо с небольшим дополнением:

Как он говорит, если ваш абонент не может обработать исключение и восстановить, тогда не поймайте исключение. Пусть функция более высокого уровня поймает это.

Если вызывающий должен что-то сделать, но затем должен умереть сам, просто сбросьте исключение. Например:

SomeObject doStuff()
  throws PanicAbortException
{
  try
  {
    int x=functionThatMightThrowException();
    ... whatever ...
    return y;
  }
  catch (PanicAbortException panic)
  {
    cleanUpMess();
    throw panic; // <-- rethrow the exception
  }
}

Вы можете также упаковать исключение, например ...

catch (PanicAbortException panic)
{
  throw new MoreGenericException("In function xyz: "+panic.getMessage());
}
201
задан Jawa 20 May 2015 в 23:57
поделиться

4 ответа

Если вы отправляете форму через Javascript (например, formElement.submit () или что-то подобное), то ни одна из кнопок отправки считается успешной. и ни одно из их значений не включено в представленные данные. (Обратите внимание, что если вы отправляете форму с помощью submitElement.click () , то отправка, на которую вы ссылались, считается активной; на самом деле это не относится к сфере компетенции вашего вопроса, поскольку здесь отправка кнопка недвусмысленна, но я подумал, что включу ее для людей, которые читают первую часть и задаются вопросом, как сделать кнопку отправки успешной с помощью отправки формы JS. Конечно, обработчики формы onsubmit все равно будут запускаться таким образом, тогда как они не будут через form.submit () так что это еще одна рыба ... )

Если форма была отправлена ​​нажатием Enter в поле, не являющемся текстовым, то на самом деле пользовательский агент должен решить, что он хочет здесь. Спецификации ничего не говорят об отправке формы с помощью клавиши ввода в поле ввода текста (если вы перейдете к кнопке и активируете ее, используя пробел или что-то еще, тогда нет проблем, поскольку эта конкретная отправка кнопка однозначно используется). Все, что здесь сказано, это то, что форма должна быть отправлена, когда активирована кнопка отправки, это даже не требование, чтобы нажатие ввода, например, текстовый ввод отправил форму.

Я считаю, что Internet Explorer выбирает кнопку отправки, которая появляется первой в источнике; У меня такое ощущение, что Firefox и Opera выбирают кнопку с наименьшим tabindex, возвращаясь к первой определенной, если ничего не определено. Там' Также есть некоторые сложности, связанные с тем, имеют ли отправленные атрибуты значения, отличные от значения по умолчанию, IIRC.

Следует убрать то, что не существует определенного стандарта для того, что здесь происходит, и это полностью зависит от браузера - насколько это возможно. возможно, что бы вы ни делали, старайтесь не полагаться на какое-либо конкретное поведение. Если вам действительно нужно знать, вы, вероятно, сможете узнать поведение различных версий браузера, но когда я исследовал это некоторое время назад, были некоторые довольно запутанные условия (которые, конечно, могут измениться с новыми версиями браузера), и я бы посоветовал по возможности избегайте этого!

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

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

109
ответ дан 23 November 2019 в 05:04
поделиться

Из ваших комментариев:

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

Я добавляю в каждую форму.

При отправке с помощью javascript: добавляйте в формы события отправки, а не щелкните события на их кнопках. Пользователи Saavy нечасто касаются мыши.

1
ответ дан 23 November 2019 в 05:04
поделиться

HTML 4 не делает это явным. В текущем рабочем проекте HTML5 указано, что первая кнопка отправки должна быть кнопкой по умолчанию :

Кнопка по умолчанию для элемента form первая кнопка отправки в порядок дерева , чей владелец формы - это form элемент.

Если пользовательский агент поддерживает разрешение пользователю отправлять форму неявно (например, на некоторых платформах нажатие клавиши "Enter" пока текстовое поле сфокусировано, неявно отправляет форму), то сделать это для формы, у которой кнопка по умолчанию имеет определенный поведение активации должно заставить пользовательский агент запустить шаги активации синтетических кликов на этом кнопка по умолчанию .

59
ответ дан 23 November 2019 в 05:04
поделиться

У меня была форма с 11 кнопками отправки, и она всегда использовала первую кнопку отправки, когда пользователь нажимал enter. Я читал в другом месте, что это не очень хорошая идея (плохая практика) иметь более одной кнопки отправки на форме, и лучший способ сделать это - иметь кнопку, которую вы хотите по умолчанию, как единственную кнопку отправки на форме. Остальные кнопки следует сделать "TYPE=BUTTON" и добавить событие onClick, вызывающее вашу собственную процедуру отправки на Javascript. Что-то вроде этого :-

<SCRIPT Language="JavaScript">
function validform()
{
  // do whatever you need to validate the form, and return true or false accordingly
}

function mjsubmit()
{
  if (validform()) { document.form1.submit(); return true;}
  return false;
}
</SCRIPT>
<INPUT TYPE=BUTTON NAME="button1" VALUE="button1" onClick="document.form1.submitvalue='button1'; return mjsubmit();">
<INPUT TYPE=BUTTON NAME="button2" VALUE="button2" onClick="document.form1.submitvalue='button2'; return mjsubmit();">
<INPUT TYPE=SUBMIT NAME="button3" VALUE="button3" onClick="document.form1.submitvalue='button3'; return validform();">
<INPUT TYPE=BUTTON NAME="button4" VALUE="button4" onClick="document.form1.submitvalue='button4'; return mjsubmit();">

Здесь кнопка 3 является кнопкой по умолчанию, и хотя вы программно отправляете форму с помощью других кнопок, процедура mjsubmit проверяет их. HTH.

6
ответ дан 23 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: