【问题标题】:Create an html watermark text for an input that stays visible while a user enters text为在用户输入文本时保持可见的输入创建 html 水印文本
【发布时间】:2012-04-06 19:49:45
【问题描述】:

我正在构建一个允许企业通过 theirname.mydomain.com 访问其业务的应用程序。我现在正在构建注册表单来执行此操作。

无论如何,我今天遇到了 squarespace,他们的注册表单实际上就像我想要的那样。如果您浏览到squarespaces site 并单击“免费试用”,他们的注册表单会出现在一个模态弹出窗口中。

弹出窗口看起来像。用户名的输入框有 username.squarespace.com 的占位符文本

当您开始输入用户名时,.squarespace.com 仍然可见。

如何复制这种行为?

【问题讨论】:

  • 嗨,这就是你想要的:我为你做的,但我想有点晚了,如果你想让我把它作为答案,请告诉我:) jsfiddle.net/NXAWW,这将保留一部分文本框中的水印与其他页面中的示例一样!祝你好运,干杯!

标签: jquery html


【解决方案1】:

如果有人遇到同样的问题,请设置为答案 :) 并供将来参考,因为您似乎最终可能会使用该解决方案:http://jsfiddle.net/NXAWW/

这将像其他页面中的示例一样在文本框中保留部分水印!祝你好运,

关键是这个

.keyup(function(){
    var $input = $(this);
    if ($input.val().trim() != '') {
        $placeholder.val($input.val().trim() + $input.attr('placeholder').replace('test',''));
        //$placeholder.val('');
    } else {
        $placeholder.val($input.val().trim() + $input.attr('placeholder').replace('test',''));
    }
});

完整的 Jquery 代码

// 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: 100,
    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($input.val().trim() + $input.attr('placeholder').replace('test',''));
        //$placeholder.val('');
    } else {
        $placeholder.val($input.val().trim() + $input.attr('placeholder').replace('test',''));
    }
});
​

【讨论】:

    【解决方案2】:

    他们可能会在您输入用户名时动态地将 .squarespace.com 添加到用户名中。

    您可以尝试使用 onKeyUp 事件向您的文本框添加文本,如下所示:

    <input type="text" id="fname" onkeyup="this.value = this.value.replace('.hello.com', '') + '.hello.com'" />
    

    【讨论】:

    • 对不起扎斯鲁斯。还有一个问题。是否可以让光标出现在 .hello.com 之前?将光标放在末尾似乎不太正确
    • 好吧,我的回答不处理光标位置,我也不能说它是否可能......但请参阅@Tats_innit 的评论,这似乎适用于定位的 SPAN 元素
    【解决方案3】:

    当您键入您的用户名时,最初的文本覆盖将被替换为第二个,它会在您键入时动态定位。只需添加一个 onkeyup 事件处理程序,它会计算当前输入文本的宽度并相应地定位叠加层。

    虽然该站点的css 不是很精彩,但是当您输入更大的用户名时,看看会发生什么:

    但这可以通过在父元素中添加overflow: hidden 轻松解决。

    【讨论】:

    • 哈哈很好的发现jb10210。也许他们认为没有人会创建这么长的用户帐户:)
    猜你喜欢
    • 2018-04-10
    • 2020-03-31
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2013-06-21
    相关资源
    最近更新 更多