onblur在提交时删除数据,为什么?

时间:2010-03-28 18:28:12

标签: javascript html css

我有以下脚本。

<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 :(得分:0)

我认为你的onblur功能可能有点偏差。您目前的方式是替换用户输入的任何值。试试这个:

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

换句话说,如果我们把它留空,只将“东西”放回文本字段。

答案 1 :(得分:0)

我认为这就是你所追求的目标

 <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"  />

答案 2 :(得分:0)

如果您设置输入的值以隐藏用户所写的内容,则更改文本输入和密码输入之间的输入类型会更简单。

<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>元素)似乎无法获得焦点。