javascript - 如果输入文本然后删除,则文本框不会验证为空

标签 javascript html forms placeholder

我对文本框的水印文本有一个恼人的问题。

我想要的是,如果用户点击文本框以外的地方并且文本框中没有文本,而不是默认文本应该出现(例如搜索...)

我有这个功能来检查它:

document.getElementById("searchtextbox").onblur = function() {

if (document.getElementById("searchtextbox").value == "") {
     document.getElementById("searchtextbox").setAttribute("value", "Search...");
}

如果我只是点击里面然后点击出去,效果会很好。当我单击内部,输入文本并将其删除,然后单击外部时出现问题。

我尝试使用 Length == 0、value == null、value.trim() == "", !value.match(/.+/) 进行此操作,但在这种情况下它们都不返回 true。

最佳答案

请考虑使用 HTML5 placeholder 属性

<input type="text" id="searchtextbox" placeholder="Search..." value="" />

正如很多人在我的回答下指出的那样,Internet Explorer 不会真正热衷于显示您的占位符文本(真是令人惊讶)。尽管如此,使用 placeholder进行功能检测无论浏览器是否支持,都是更语义化的方式。

您可以像这样进行特征检测(来自 diveintohtml5.ep.io ):

function supports_input_placeholder() {
  var i = document.createElement('input');
  return 'placeholder' in i;
}

如果这是错误的,您可以使用您的 Javascript placeholder hack。

更新:如果您需要帮助如何更好地实现,请参阅 Html placeholder text in a textarea form .


我还查看了您的代码并修复了它:

jsFiddle Demo

document.getElementById("searchtextbox").onblur = function() {
    if (this.value == "") {
        this.value="Search...";
    }
}

在这里使用 setAttribute 不是正确的方法,您不想设置属性,而是设置事件属性 (.value)。您的 if 条件确实有效,但未反射(reflect)更改。

关于javascript - 如果输入文本然后删除,则文本框不会验证为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6263697/

相关文章:

python - 我如何用 django admin 中的复选框替换 charfield

javascript - 如何确保我的 Javascript 动画保持在其他固定元素下方?

html - canvas画直线或圆弧时是否支持 float ?

PHP 表单发布被调用两次

html - Jade 插值在属性中不起作用

javascript - 使用纯 CSS 创建轮播

jQuery:防止按钮/单击事件上的表单提交

javascript - 犀牛的控制台输入功能?

javascript - jQuery 查找元素之前的第一个属性

javascript - 为什么我们不在 render 方法中编写 axios.get(blabla) 呢?