【问题标题】:How to put explanatory text inside textboxes in a form and focus cursor on fields?如何在表单中的文本框中放置解释性文本并将光标聚焦在字段上?
【发布时间】:2009-06-23 14:38:33
【问题描述】:

基本上是问题的两个部分。

  1. 如何将解释性文本放在表单中的文本框内(例如在表单中文本框的文本区域中编写电子邮件),并带有 facebook 主页上的样式(即灰显以表示建议)。李>
  2. 如何在页面加载后立即将光标焦点放在特定的表单字段上(例如 google 登录或 facebook 登录)

上述过程中是否涉及到javascript?如果是,请说明

  1. 非 JavaScript 解决方法和/或
  2. 执行所需操作的 javascript 代码

【问题讨论】:

  • 我不确定这里发生了什么,但不要投反对票,除非 a) 您绝对确定答案实际上是错误的。人们需要阅读blog.stackoverflow.com/2009/03/…
  • 你一个 jQuery 家伙不得不删除他的帖子,也许仍然可以获得徽章。不需要投票。无知是投反对票的最好形式。投票给你喜欢的任何东西,剩下的留下。

标签: php javascript forms cursor-position


【解决方案1】:

第一个技巧只是一个预设值。当您单击该字段时,它具有检查的 onclick 功能。值是“在此处写您的电子邮件”。如果是这样,请清除该字段。如果不是什么都不做。

然后它有一个 onblur 函数来检查该字段是否为空。如果是这样,请在其中打印“在此处填写您的电子邮件”。

第二个也是 JavaScript。

Here is 具有这两个功能的示例页面

<html>
<script type="text/javascript">
    function searchBox()
    {
        elem = document.getElementById("search");

        if(elem.value == "Search...")
        {
            elem.value = "";
        }
    }

    function searchBoxBlur()
    {
        elem = document.getElementById("search");

        if(elem.value == "")
        {
            elem.value = "Search...";
        }
    }

    function init()
    {
        document.getElementById("other_box").focus();
        }
        window.onload = init;
    </script>
<body>
    <input type="text" name="other_box" id="other_box" />
    <input type="text" name="search" id="search" value="Search..." onclick="searchBox()" onblur="searchBoxBlur()" />
</body>
</html>

【讨论】:

  • 太棒了!谢谢!也许他们应该取消对 cme​​ts 的最小 15 字符限制!我想知道为什么他们首先拥有它?否则这条评论可能只是“非常感谢!”这会让你、我和其他人变得更好(包括我的键盘);-)
  • 最后一个字符后有很多空格。就像我在上面的 Yes 评论中所做的那样。你看不到它,但它就在那里。
  • 整洁! .
【解决方案2】:

第一个,又快又脏:

<input name="foo" value="Default text OMG!" onfocus="if(this.value == 'Default text OMG!') this.value = ''"/>

建议将 onfocus 事件作为外部 JavaScript 文件中的函数。这将产生:

外部脚本:

function checkText(el,someText){ if(el.value == someText) el.value = ''}

您的意见:

<input name="foo" value="Default text OMG!" onfocus="checkText(this,'Default text OMG!')"/>

第二个:给你想要“聚焦”的输入一个 ID,然后做这样的事情:

<input id="foo" name="foo" value="Default text OMG!"/>

在脚本中:

window.onload = function(){ document.getElementById('foo').focus() }

【讨论】:

  • 是的,我同意 altcognito。 :) 但 Olafur 的回答结果更全面,更接近我想要的。还是非常感谢
【解决方案3】:

这将需要 javascript(通过 jQuery 框架)。以下是快速输入的,未经测试。可能需要一些小的修补。如果您有任何问题 - 提问 :)

  1. 自动对焦所需元素
  2. 在失焦时更改元素文本颜色
  3. 当用户提供的文本不存在时显示默认文本

/* Run our work once the document is ready (loaded */
$(document).ready(function(){

  /* Set initial state of field */
  $("input.first-name").val("First Name").css("color", "#CCCCCC");

  /* Attach logic to the .focus() event of our input field */
  $("input.first-name").focus(function(){

    /* What to do when this field is focused */
    $(this).val("").css("color", "#333333");

  }).blur(function(){

    /* What to do when the field is blurred */
    if ($(this).val() == "") {

      /* Set value to 'First Name,' and set color to light gray */
      $(this).val("First Name").css("color", "#CCCCCC");

    }

  });

  /* Autofocus our field */
  $("input.first-name").focus();

});

【讨论】:

  • 这是 jQuery 吗?还是javascript?
  • 它是 javascript,通过 jQuery 框架。 jQuery 基本上使 javascript 更易于使用。它可以让您做得更多、更快。而且它使您不必弄清楚 IE、FF 和其他浏览器处理 javascript 的方式之间的差异。
【解决方案4】:

没有非 JavaScript 方法可以解决您问题的第一部分。就第二部分而言,它可以使用 JavaScript 轻松完成,但即使没有它,大多数现代浏览器也会将焦点添加到第一个输入字段。

JavaScript 代码

  1. 只需将输入字段的值设置为您的预设值:

    function focus_function()
    {
    if (this.value=="Enter email here") {
    this.value="";
    this.class="actualEmail";
    }
    }
    
    function blur_function()
    {
    if (this.value=="") {
    this.value="Enter email here";
    this.class="preset";
    }
    }
    

    你可以有两个CSS类:presetactualEmail,并指定不同的颜色等。

  2. 只需要一个 onload 函数,将焦点放在所需的输入字段上:

    window.onload = function() 
    {
    document.getElementById("email_field").focus();
    }
    

【讨论】:

    【解决方案5】:

    您可以考虑一些非标准属性:placeholder(我猜在 safari 中有效)和autofocus (a part of HTML5 spec)

    【讨论】:

      【解决方案6】:
      myField.focus();
      

      当页面加载时,应该将光标放在 myField 中(如果你把它放在末尾或 $(document).ready() jQuery 块中)。我在不同的浏览器中看到了一些不一致的行为,所以你的里程可能会有所不同。

      至于设置文本字段输入的颜色,我会将其设置为具有默认值,并在用户单击它时添加一个单独的 CSS 类:

      你的 CSS 看起来像:

      .grayedInputField {
          color: gray;
      }
      .activeInputField {
          color: black;
      }
      

      当用户点击该字段时,让 javascript 向该字段添加一个类以更改文本颜色,就像这样(再次,jQuery):

       $(".grayedInputField").focus(function(){$(this).addClass("activeInputField")});
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多