有数百个 jQuery 占位符/提示插件。但没有一个做我想做的事
我正在寻找一个能够:
- 当用户专注于该字段时淡化提示,但在用户开始输入之前不会清除它(如 StackOverflow/iOS 之一)
- 将与 HTML5 占位符属性一起使用。
- 用 jQuery 构建
- 跨浏览器(包括IE7/IE8)
- 使用不显眼的 JavaScript
- 理想情况下也可以使用密码字段
有数百个 jQuery 占位符/提示插件。但没有一个做我想做的事
我正在寻找一个能够:
@Roatin Marth 是对的;如果您要将文本视为占位符,则应该清除它。这就是占位符的定义。
尽管如此,我还是模拟了一个概念证明,欢迎您随意使用。但是,我必须使占位符文本如此轻巧以至于几乎看不到它,以防止它过多地混淆前面的文本(这就是默认行为是清除它的原因)。
您可以在以下位置看到它:http: //jsfiddle.net/zYQ4Q/4/
// Create placeholder input to serve as background
var $test = $('#test');
var $placeholder = $test.clone().removeAttr('id').removeAttr('placeholder').addClass('placeholder').val($test.attr('placeholder'));
var $container = $('<span class="placeholder-container"></span>');
$container.insertAfter($test).append($test).append($placeholder);
// Basic styling
$container.css({
position: 'relative'
});
$test.css({
position: 'absolute',
left: 0,
top: 0,
zIndex: 10,
backgroundColor: 'transparent',
borderColor: 'transparent'
});
$placeholder.css('color', 'transparent');
// Behavior for focus and blur to achieve the visual effect
$test.focus(function(){
var $input = $(this);
var $placeholder = $('.placeholder', $input.parent());
$placeholder.css('color', '#e0e0e0');
}).blur(function(){
var $input = $(this);
var $placeholder = $('.placeholder', $input.parent());
if ($input.val() == '')
$placeholder.css('color', 'transparent');
}).keyup(function(){
var $input = $(this);
if ($input.val().trim() != '') {
$placeholder.val('');
} else {
$placeholder.val($input.attr('placeholder'));
}
});
更新:代码和 jsfiddle 已更新,以反映基于 OP 评论的新更改。将文本输入输入后,占位符现在会清除。
更新,感谢 chrisdpratt,我实际上找到了一个插件,可以满足我的要求:
演示: http: //labs.mario.ec/jq-watermark/