onblur удаляет данные при отправке, почему? - PullRequest
0 голосов
/ 28 марта 2010

У меня есть следующий скрипт.

<input style="color: #ccc" type="text" value="something" name="country"  
onFocus="if (this.value == 'something') {
    this.value='';this.style.color='black';}" 
onblur="if (this.value != 'something') {
    this.value='something'}" />
<input  type="submit" value="save"  />

При размытии входное значение устанавливается в значение по умолчанию, как и должно быть. Когда я нажимаю кнопку отправки, значение также устанавливается на «что-то»; при отправке мне нужно опубликовать данные, которые пользователь написал во входных данных, а не по умолчанию.

Что я могу сделать, если я хочу, чтобы при нажатии на кнопку отправки значение ввода не менялось? спасибо

Ответы [ 3 ]

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

Я думаю, это то, что вы после

 <input style="color: #ccc" type="text" value="something" name="country"  
onFocus="if (this.value == 'something') {
    this.value='';this.style.color='black';}"
  onblur="if(this.value == ''){this.value = 'something'}" />
<input  type="submit" value="save"  />
0 голосов
/ 29 марта 2010

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

<input style="color: #ccc" type="password" name="country"
       onFocus="this.type='text'; this.style.color=''"
       onblur="this.type='password'" />

Если вы хотите, чтобы ввод отображал значение по умолчанию, когда он не имеет фокуса, но отправлял значение, введенное пользователем в последний раз, вы можете использовать скрытый ввод. Поскольку JS может быть отключен / недоступен, вам нужно либо изменить имена входов в JS, либо решить, какой вход получить значение со стороны сервера.

<input type="hidden" name="country_actual" />
<input style="color: #ccc" type="password"
       onFocus="this.value='';this.style.color='black';" 
       onblur="this.form.elements.counter.value=this.value; this.value='something'" />
<script type="text/javascript">
    document.forms[document.forms.length-1].elements.country.name = '';
    document.forms[document.forms.length-1].elements.country_actual.name = 'country';
</script>

Если вы хотите сохранить введенное пользователем значение только тогда, когда фокус переключается с ввода на кнопку отправки, это трудно или невозможно. Когда фокус переключается, событие размытия может срабатывать до события фокусировки (в зависимости от браузера), поэтому вы не можете использовать его для проверки вновь сфокусированного элемента, что в противном случае вы могли бы сделать с document.activeElement. Кроме того, в браузерах на основе webkit кнопки (элементы <input> или <button>), кажется, не получают фокус.

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

Я думаю, что ваша функция onblur немного отключена. То, как у вас сейчас есть, заменяет любое значение, введенное пользователем. Попробуйте это:

onblur="if (this.value == '') {this.value='something'}"

Другими словами, вставляйте «что-то» обратно в текстовое поле, только если мы оставили его пустым.

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