输入字段内的标签在聚焦时消失

时间:2012-05-31 19:23:11

标签: javascript html css forms styles

如何获得格式如下的标签:

<label for="email"> Email Address *</label>
<input id="email" type="text" name="email" value="" size="18">

显示输入文本框内部并在输入元素处于焦点或已满时消失?

我发现的解决方案要求我改变html代码,这是我无法做到的,因为它来自第三方小部件。我可以让标签显示在输入字段的顶部,但我不知道如何让它对输入字段的内容作出反应。

4 个答案:

答案 0 :(得分:4)

你想要的是一个占位符。它是一个HTML5属性,但IE和旧浏览器不支持。要填写,那里有几个图书馆。我使用了jquery.enablePlaceholder,它运行正常。

使用JQuery,您将能够轻松隐藏/删除当前标签并使用其内容填充占位符属性(如果需要,插件将使用该属性)。

$(document).ready(function() {
    // Fetch the label and its text
    var placeholderText = $("label[for='email']").text();

    // Remove the unnecessary label
    $("label[for='email']").remove();

    // Set the placeholder attribute
    // and enable the plugin for broswer not supporting it
    $("#email").attr('placeholder', placeholderText).enablePlaceholder(); 
});

答案 1 :(得分:0)

有没有办法覆盖输入onFocus功能?

如果是肯定的,有两种方式:

  • 尝试return false;
  • 在该函数上将display属性设置为inline。 (不 推荐)

答案 2 :(得分:0)

鉴于您无法更改HTML结构,这里有一个简单的JavaScript实现目标的方法:

function placeholding(el,greyed) {
    if (!el) {
        // if you don't specify a DOM node, it quits
        return false;
    }
    else {
        var input = el,
            /* assumes the label element is the previous element sibling
               (requires a fairly up-to-date/compliant browser */
            label = el.previousElementSibling,
            placeholder = label.textContent,
            /* specifies the color string, or uses the default, for the
               color of the place-holder */
            greyed = greyed || '#999';

        label.style.display = 'none';
        input.value = placeholder;
        input.style.color = greyed;
        input.onfocus = function() {
            /* if the current input-value is equal to the place-holder,
               removes that value. */
            if (this.value == placeholder) {
                this.setAttribute('data-oldvalue', this.value);
                this.value = '';
            }
            this.style.color = '#000';
        };
        input.onblur = function() {
            // if no new value has been set, replaces the place-holder
            if (this.value == '' || this.value.length === 0) {
                this.value = this.getAttribute('data-oldvalue');
                this.style.color = greyed;
            }
        };
    }
}

placeholding(document.getElementById('email'));​​​​​

隐藏上一个label元素,将其文本用作input元素中的“占位符”,隐藏该占位符以关注input,如果值为没有改变,再次显示占位符。

参考文献:

答案 3 :(得分:0)

如果你能够使用jQuery:

$("#yourForm input[type='text']").each(function(){
    $(this).attr("placeholder", $(this).prev("label").text());
}