<input type ="text"> helper(用户输入时淡出文本)javascript

Shi*_*ant 6 html javascript

我想在输入字段中添加有用的文本(在javascript中没有任何框架使用)texttextarea类似的东西,但不知道它叫什么

me.com http://i48.tinypic.com/rrhvye.png

因为它在me.com中使用,但我不想提交用作帮助程序的值.

抱歉英文不好.

谢谢.

Ms2*_*ger 9

最简单的方法:

<input type=text placeholder="Member name">
Run Code Online (Sandbox Code Playgroud)


Jus*_*son 2

我发现解决此问题的最佳方法是使用<label>并将其放置在输入区域上。这给你:

  1. 更自由的审美
  2. 保持页面语义
  3. 允许你优雅地降级
  4. 提交工具提示作为输入值不会导致问题,也不必担心管理该问题

这是一个普通版本,因为您不需要框架。标记不需要更改,但您可能需要调整 CSS 以满足您的需求。

HTML:

<html>
<head>
    <style>
    label.magiclabel {
        position: absolute;
        padding: 2px;
    }
    label.magiclabel,
    input.magiclabel {
        width: 250px;
    }
    .hidden { display: none; }
    </style>

    <noscript>
        <style>
            /* Example of graceful degredation */
            label.magiclabel {
                position: static;
            }
        </style>
    </noscript>
</head>
<body>
<label>This is not a magic label</label>

<form>
    <label class="magiclabel" for="input-1">Test input 1</label>
    <input class="magiclabel" type="text" id="input-1" name="input_1" value="">

    <label class="magiclabel" for="input-2">Test input 2 (with default value)</label>
    <input class="magiclabel" type="text" id="input-2" name="input_2" value="Default value">
</form>

<script src="magiclabel.js"></script> 
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

香草-magiclabel.js

(function() {
    var oldOnload = typeof window.onload == "function" ? window.onload : function() {};

    window.onload = function() {
        // Don't overwrite the old onload event, that's just rude
        oldOnload();
        var labels = document.getElementsByTagName("label");

        for ( var i in labels ) {
            if (
                // Not a real part of the container
                !labels.hasOwnProperty(i) ||
                // Not marked as a magic label
                !labels[i].className.match(/\bmagiclabel\b/i) ||
                // Doesn't have an associated element
                !labels[i].getAttribute("for")
            ) { continue; }

            var associated = document.getElementById( labels[i].getAttribute("for") );
            if ( associated ) {
                new MagicLabel(labels[i], associated);
            }
        }
    };
})();

var MagicLabel = function(label, input) {
    this.label = label;
    this.input = input;

    this.hide = function() {
        this.label.className += " hidden";
    };

    this.show = function() {
        this.label.className = this.label.className.replace(/\bhidden\b/ig, "");
    };

    // If the field has something in it already, hide the label
    if ( this.input.value ) {
        this.hide();
    }

    var self = this;

    // Hide label when input receives focuse
    this.input.onfocus = function() {
        self.hide();
    };

    // Show label when input loses focus and doesn't have a value
    this.input.onblur = function() {
        if ( self.input.value === "" ) {
            self.show();
        }
    };

    // Clicking on the label should cause input to be focused on since the `for` 
    // attribute is defined. This is just a safe guard for non-compliant browsers.
    this.label.onclick = function() {
        self.hide();
    };
};
Run Code Online (Sandbox Code Playgroud)

原版演示

正如您所看到的,大约一半的代码包含在window.onload. 这可以通过使用框架来缓解。这是使用 jQuery 的版本:

$(function() {
    $("label.magiclabel[for]").each(function(index, label) {
        label = $(label);
        var associated = $("#" + label.attr("for"));

        if ( associated.length ) {
            new MagicLabel(label, associated);
        }
    });
});

var MagicLabel = function(label, input) {
    // If the field has something in it already, hide the label
    if ( input.val() !== "" ) {
        label.addClass("hidden");
    }

    label.click(function() { label.addClass("hidden"); });
    input.focus(function() { label.addClass("hidden"); });
    input.blur(function() {
        if ( input.val() === "" ) {
            label.removeClass("hidden");
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

jQuery 演示。不需要更改标记,但当然您需要包含 jQuery 库。