【问题标题】:How to keep placeholder visible when user is typing first substring of the placeholder text当用户键入占位符文本的第一个子字符串时如何保持占位符可见
【发布时间】:2023-04-09 05:09:01
【问题描述】:

通常当我们使用输入占位符时,占位符文本会在用户输入内容后立即消失。

我正在考虑给用户一个关于输入的随机示例,以便用户可以使用占位符进行模仿。问题是,当用户键入某些内容时,该示例将消失。当用户键入占位符文本的开头部分时,有什么方法可以使占位符保持可见?

这是一个例子

占位符文本是“Lorem ipsum dolor sit amet”。当用户键入“Lorem ipsum”时,我假设用户将尝试键入示例,以便文本仍然可见。但是当用户输入像“Lorem dolor”这样的其他内容时,我假设用户会尝试输入与示例不同的内容。但是,如果结果是用户按下了错误的按钮,则在用户按下“退格”后,占位符文本将再次可见,直到输入文本再次成为占位符部分(例如,用户删除“dolor”文本并且输入文本返回到“ Lorem')。

实际上我目前使用自动完成下拉菜单作为替代,但我很好奇这是否可以使用 Javascript(最好是 jQuery)来完成。

更新

这是我所能得到的。我正在考虑克隆一个与文本输入具有相同样式的元素。

类似的东西

var textinput = $('#textinput');
var textplaceholder = $('<span>');
var placeholdertext = textinput.attr('placeholder');
textinput.attr('placeholder', '');

textplaceholder.insertAfter(textinput);
textplaceholder.html(placeholdertext);
textplaceholder.copyCSS(textinput);

textinput.keyup(function() {
    var current = $(this).val();
    if(placeholdertext.substr(0, current.length) == current){
        textplaceholder.html(placeholdertext);
    } else {
        textplaceholder.html(current);
    }
});

这是小提琴http://jsfiddle.net/petrabarus/FDS88/

问题是如何使元素出现在输入文本的正后方,使文本在每个浏览器中看起来对齐,并模拟鼠标交互(即当文本聚焦时边框发光等)?

【问题讨论】:

  • 向我们展示您到目前为止所做的代码?谢谢。
  • 在文本框后面放置一个div 以创建该效果。然而,有很多方法可以做到这一点,例如启用 contentEditable 的span 并在其后放置灰色文本:jsfiddle.net/DerekL/7sD2r
  • @Derek:这其实是一个很不错的想法,值可以放在一个隐藏的输入里面。
  • @PetraBarus - 全部完成:jsfiddle.net/DerekL/7sD2r

标签: javascript jquery html css


【解决方案1】:

有很多方法可以达到这种效果。这是一种方法:

<div class="wrapper">
    <span class="textbox" contentEditable="true">Lorem i</span><span class="gray"></span>
</div>
<!-- and some CSS magic to make it look legit -->
var text = "Lorem ipsum";

$(".wrapper > .textbox").on("input", function(){
    var ipt = $(this).text().replace(/\u00A0/g, " ");
    //freakin NO-BREAK SPACE needs extra care
    if(text.indexOf(ipt) == 0){
        $(".gray").text(text.substr(ipt.length, text.length));
    }else{
        $(".gray").text("");
    }
}).trigger("input");

http://jsfiddle.net/DerekL/7sD2r/

关于 NO-BREAK SPACE,请参阅here

【讨论】:

  • 我尝试输入一些内容并键入退格键,直到所有文本消失。灰色的文字变成了这样。它在你的行为中是否相同? i.imgur.com/nJYVIn2.png
  • @PetraBarus - 很高兴它有帮助。
  • 无论如何,如何模拟焦点?例如,在输入文本时更改边框颜色,在不输入时更改为正常边框颜色。
  • 还有一个,如何模拟用户按回车提交表单?
  • 当占位符文本比虚假文本字段长得多时,又遇到了一个问题。
【解决方案2】:

您可以尝试使用此代码...或这种方式

看看这段代码:

fiddle

html

<div id="main">
    <input TYPE="TEXT" id="in1"/>
    <div id="back"> sanmveg</div> 

</div>

css

    #back{
    //background-color:#ccc;
    width:200px;
    height:22px;
    margin-top:-21px;
    margin-left:4px;
    font-family:arial;
    font-size:13px;
}

#main{
    width:200px;
    height:20px;
}

#in1{
    //background-color:#EEE;
    opacity:.7;
    font-family:arial;
}

你知道我刚刚使用 html 和 css 来做你想做的事情。

解释

你知道我使用过 html 和 css。输入框的不透明度并不大,它位于一个带有一些文本的 div 框上,并且 div 标签的放置方式是,当用户在输入框中键入一些文本时,div 中的文本就在光标的位置

【讨论】:

  • 不错的建议,简单有效。我用了你的逻辑并改变了这个。对于假文本区域:颜色:#3b3636;顶部:0;左:0px;位置:绝对; z-index:1;而真正的 textarea: color: #000;不透明度:0.7;位置:绝对; z 指数:10;左:0;顶部:0;
猜你喜欢
  • 2020-12-09
  • 2013-10-31
  • 2018-04-10
  • 2014-12-07
  • 2018-03-06
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
相关资源
最近更新 更多