【问题标题】:Texarea onfocus, on blur with javascriptTextarea onfocus,使用 javascript 进行模糊处理
【发布时间】:2012-11-03 14:16:17
【问题描述】:

我正在寻找一种使用 JavaScript 控制 textarea 的默认值、onfocus 和 onblur 的方法

(我知道:
- textarea 中的默认值为:<textarea name="text"> Default value </textarea>
- 有一些使用 html5 和 jQuery 的解决方案。但在这里我正在寻找一个纯 JavaScript 解决方案)

我可以将它应用于 textarea 吗?:

form name="form1" action="comprovar.php" method="post">
    <input type="text" name="name" value="name" 
        onfocus="if (this.value=='name') this.value = '';" 
        onblur="if (this.value=='') this.value = 'name';"   
    />
 </form>

我怎样才能在这里获得焦点和模糊?:

<textarea name="text">  Write here </textarea>

示例在这里:http://jsfiddle.net/sKvMa/

【问题讨论】:

    标签: javascript html forms textarea


    【解决方案1】:

    您可以在 textarea 上设置onfocusonblur完全一样,就像您可以从输入中一样。看这个演示:http://jsfiddle.net/sKvMa/1/

    <textarea name="text" 
        onfocus="if (this.value=='Write here') this.value = '';" 
        onblur="if (this.value=='') this.value = 'Write here';" >Write here</textarea>
    

    【讨论】:

    • 是的,我同意。只是演示这个概念。
    • 顺便说一句,如果它的 just 用于占位符文本,那么你最好使用placeholder HTML 功能(旧版本的 IE 将无法应对)
    • @Nrc - 查看我对默认值设置的编辑,例如,我使用“写在这里”作为默认值。
    • 内联 JS 通常很糟糕,因为 a) 它不能被缓存并且必须每次都提供服务,b) 你不能缩小/压缩它或应用任何其他类型的优化服务策略,并且 c) 它减少了HTML 的可读性(HTML 理想情况下用于演示,来自 JS 的 行为最好来自其他地方)
    • 您的回答清晰而简单。谢谢你。我理解内联的缺点。 HTML5 简单明了,但如果我必须提供 IE 的替代品,一切都太复杂了。 JQuery 是最好的解决方案吗?
    【解决方案2】:

    您实际上可以完全不使用 JavaScript 来实现这一点,尽管它是 HTML5 的一个特性,因此它适用于现代浏览器。

    <textarea name="text" placeholder="Write here"></textarea>
    

    根据您使用占位符的目的,这可能适合您,因为实现和维护脚本解决方案要简单得多。

    【讨论】:

    • 我可以只使用这个 HTML5 解决方案吗?如果我必须提供一个使用 jQuery 或 JavaScript 的替代解决方案,那么为什么还要考虑包含 HTML5 解决方案?
    • 我个人只是用这个。没有 JavaScript 或 jQuery。它适用于 IE10 和其他几乎所有东西。
    【解决方案3】:

    在新浏览器中,您可以使用placeholder 属性。 jsfiddle 对于不支持placeHolder的浏览器

        if( !'placeholder' in document.createElement("input") ){
    
            var input =  document.getElementsByTagName("input"),
                textArea = document.getElementsByTagName("textarea");
        for(var k = 0; k < input.length; k++){
             input[k].value= "name";
            input[k].onblur = function(){
                if(this.value == "") this.value = "name"
            }
            input[k].onfocus = function(){
                if(this.value == "name") this.value = ""
            }
        }
        for(var k = 0; k < textArea .length; k++){
              textArea [k].value= "name";
            textArea [k].onblur = function(){
                if(this.value == "") this.value = "name"
            }
            textArea [k].onfocus = function(){
                if(this.value == "name") this.value = ""
            }
        }
    }
    ​​
    

    【讨论】:

      【解决方案4】:

      或者你可以像这样从jQuery定位

      var mytext = $("textarea[name='text']").val();
      

      然后你可以比较文本

      if (mytext == 'Write here')
        //do this
      else
        //do that
      

      【讨论】:

      • 可能是因为它不完整。但是,这将是对答案的不恰当使用 - 只有在提供误导性或明显错误的答案时才应该对答案进行否决。如果投反对票的人认为是这种情况,他应该为此添加评论,否则他自己只是在误导(和巨魔)。至少让它归零!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多