52

示例http://dabblet.com/gist/5859946

如果您有一个长占位符,则默认情况下输入显示的宽度不足以显示所有占位符文本。

例如

<input placeholder="Please enter your name, address and shoe size">

如果不设置固定宽度,最好不设置 javascript,您可以设置输入以显示所有占位符文本吗?

4

4 回答 4

43

这只能通过 javascript 通过设置 size = 占位符长度来完成:

input.setAttribute('size',input.getAttribute('placeholder').length);

这是一个针对所有输入的代码:http: //jsfiddle.net/KU5kN/

于 2013-06-25T17:08:17.960 回答
10

以防万一有人想将它与 jQuery 一起使用,该代码将在下面。此外,如果placeholder接受的答案中不存在该属性,您将收到错误,下面的 jQuery 示例也处理了这些错误。

$("input[placeholder]").each(function () {
        $(this).attr('size', $(this).attr('placeholder').length);
    });
于 2015-01-12T00:47:17.783 回答
6

我采用了 Avner Solomon 的解决方案,正如上述部分之一的评论中所建议的那样。

您需要一个包含标签的div元素input和另一个div包含标签的元素:

<div class="input-container">
     <!-- this element is hidden from display and screen readers. -->
     <div class="input-hidden-label" 
          aria-hidden="true">
       Your placeholder text
     </div>

     <input class="input" 
            type="text" 
            placeholder="Your placeholder text"/>
</div>

假设 theinput-hidden-label和 the的字体样式input相同,您将在输入旁边看到一行文本。文本将与输入的长度相同,给出或占用几个像素。

然后,您可以应用这些样式:

.input-container {
  display: inline-block;
  margin-bottom: 2em;
}

.input {
  display: inline;
  width: 100%;
  font-size: 16px;
  font-family: Times;
}

.input-hidden-label {
  height: 0;
  visibility: hidden;
}

这通过提供height: 0和删除标签来隐藏标签visibility。但是,width遗迹。div包含input且标签匹配其width最长子项的 。如果您随后将 设置inputwidth: 100%,它将与已匹配占位符的父宽度匹配。

看到这个小提琴。

注意事项

这个想法不是很容易获得,这个解决方案也不是。您应该为输入包含一个标签,而不是依赖占位符本身作为标签。

于 2020-03-31T13:52:24.057 回答
1

我想到的解决方法:

  • 使用与占位符相同的文本创建一个 span 元素。
  • 测量跨度元素的宽度。
  • 将输入设置为 span 元素的宽度。
  • 隐藏跨度元素。显示无将不起作用,使用其他方法。

http://jsfiddle.net/Timar/cwLp3rbo/

var input = document.getElementById('input-1');

// measure width of same text as placeholder
var placeholder =  document.getElementById('input-1-placeholder');


input.style.width = placeholder.offsetWidth + "px"
于 2019-12-30T20:19:31.617 回答