Переформатирование полей ввода - PullRequest
0 голосов
/ 14 апреля 2009

Я хочу переформатировать содержимое поля формы HTML при отправке.

Например: пользователь вводит "1.234,56" (это допустимый формат для чисел в этой локали), но я хочу передать значение "1234.56" на сервер.

Я бы хотел услышать об опыте других людей в этом. Как ты это делаешь?

Моя первая мысль - это событие onSubmit, которое переформатирует содержимое. Но есть ли у кого-нибудь опыт реализации этого?

Или, может быть, лучшая идея?


ВСЕГДА доступен Javascript. Если с Додзё намного проще, я могу это использовать.

И, кстати: на самом деле все немного сложнее, так как я тоже хочу переформатировать на «размытие». Таким образом, пользователь вводит «1234,56» (формат ввода). Когда фокус изменяется, он должен переформатироваться в «1.234,56» (формат отображения). Но фактическое значение, отправляемое на сервер, должно быть «1234.56» (формат машины).
Преобразование между форматом ввода и форматом отображения должно быть простым, но, может быть, все это можно комбинировать каким-то умным способом.


РЕДАКТИРОВАТЬ: Это не для общедоступного веб-сайта, поэтому мнения о зависимости от Javascript и аналогичных не имеет отношения.

Ответы [ 3 ]

1 голос
/ 14 апреля 2009

Учитывая информацию, я бы, вероятно, сделал следующее:

Обработчик размытия должен

  1. Получить ввод
  2. Подтвердить ввод - это число? это в пределах досягаемости? и т.д.
  3. Преобразовать в нормализованную форму для отображения (1.234,56)
  4. Установить значение [input] формы для нормализованной формы

Обработчик отправки должен

  1. Получить ввод
  2. Проверка ввода - так же, как и выше
  3. Преобразовать из значения, зависящего от локали, в значение, которое вы хотите на сервере.
  4. Установите значение [input] формы в преобразованное значение.
  5. Отправить форму.

Помните, что независимо от того, сколько вы выполняете проверку на стороне клиента, вам все равно нужно выполнять проверку на стороне сервера. Но я бы сделал столько проверки в Javascript, сколько мог бы стоять, просто потому, что предпочел бы, чтобы пользователь знал, что его значения формы потерпят неудачу, без необходимости сначала обращаться к серверу.

Кроме того, я бы, вероятно, изменил действие на стороне сервера, чтобы иметь возможность обрабатывать суммы во многих локалях. Это дало бы мне больше возможностей для использования обработчика отправки в Javascript.

1 голос
/ 14 апреля 2009

Хорошо, одна идея, которая приходит в голову, может состоять в том, чтобы использовать исключительно Javascript и сохранять фактическое введенное значение в скрытом поле. Затем перехватите событие onBlur Javascript в текстовом поле, чтобы вызвать функцию, которая форматирует значения в соответствии с вашими требованиями.

Наконец, при отправке формы получите доступ к значению, присутствующему в скрытом поле, а не в текстовом поле.

0 голосов
/ 14 апреля 2009

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

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