Не отправляйте форму, если не включен JavaScript - PullRequest
4 голосов
/ 10 марта 2010

У меня есть базовая форма, которую я использую для регистрации пользователя.Я использую событие onsubmit формы для заполнения скрытого поля формы, основанного на некоторых полях формы.Это прекрасно работает, но я бы хотел запретить отправку формы, если javascript НЕ включен.Это обеспечит правильное заполнение скрытого поля на клиентском компьютере.

Я понимаю, что, вероятно, рекомендуется поддерживать регистрацию без включенного javascript, но я хотел бы запустить с текущим решением, которое у меня есть

<form id='member_form' method="post" action="http://www.mysite.com/" onsubmit="build_username();" >

Ответы [ 6 ]

8 голосов
/ 10 марта 2010

Если им нужен javascript для отправки формы, то нет смысла даже показывать им форму.

В свете этого я бы порекомендовал что-то вроде этого

<noscript>
  You cannot register without javascript enabled.
</noscript>

<form id="registration" style="display: none">
  <!-- form stuff here -->
</form>

<script type="text/javascript">
  document.getElementById( 'registration' ).style.display = 'block';
</script>

Это немного глупо и взломано, но для этого требуется javascript для простой веб-формы.

3 голосов
/ 10 марта 2010

Проблема в том, что форма отправляется по умолчанию.

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

Кроме того, удаление кнопки «отправить» не помогает, так как форму все еще можно отправить с помощью клавиши enter .

Но, я представляю вам (каламбур не предназначен!) Это зло идея:

<form action="#">
  ....
</form>

вначале это делает форму практически не подлежащей отправке, поскольку целью отправки является текущая страница.

Затем вы должны установить правильный атрибут action, используя JavaScript.

Я не могу представить причину, по которой это не будет работать надежно во всех браузерах, за исключением того, что попытка отправить его заставит браузер перейти на верхнюю часть страницы из-за хеша #.

2 голосов
/ 10 марта 2010

Скрытие кнопки отправки не будет работать, потому что браузер попытается отправить форму, если вы нажмете Enter в input type="text".

Возможно, вы захотите добавить элемент form с помощью JavaScript (т. Е. Его нет в HTML).

0 голосов
/ 10 марта 2010

Просто избавьтесь от любых <input type="submit"> или <input type="image"> и замените их кнопками / изображениями, которые инициируют отправку формы с помощью JavaScript. Если нет элементов управления, которые инициируют отправку, когда JavaScript отключен, вы будете достаточно уверены, что отправка была из JavaScript. Имейте в виду, что умные пользователи, неработающие браузеры и другие странности гарантируют, что поврежденные или недействительные данные будут отправлены в любом случае.

0 голосов
/ 10 марта 2010

Один из способов сделать это - установить скрытое поле по умолчанию на что-то вроде hunter2, а затем, когда форма будет отправлена, javascript заменит ее на что-то другое. Затем вы можете узнать, был ли у пользователя включен JavaScript.

0 голосов
/ 10 марта 2010

Почему бы просто не скрыть кнопку отправки по умолчанию и не показывать ее с помощью JavaScript? Это не остановит пользователя от отправки формы нажатием клавиши ввода, но это обрезает цифры. Вы также можете показать сообщение с html-элементом NOSCRIPT, сообщающее пользователям, что нужно включить JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...