“滚动”到长文本输入的最右侧

IT技术 javascript html css
2021-03-01 17:39:04

我有一个图像选择器,它允许从图库中选择一个图像,然后将 URL 填充到一个<input type="text">字段中。URL 可能非常长,并且总是在文本字段中看到 URL 的前半部分几乎没有信息value。

有人知道一种“滚动”到文本字段最右侧的方法,以便可以看到 URL 的结尾而不是开头?无需求助于 textarea。

5个回答

除 IE6-8/Opera 之外的所有浏览器

设置HTMLInputElement.setSelectionRange()后明确设置输入值的长度focus()缺点是它一旦模糊就会回滚开始。

var foo = document.getElementById("foo");
foo.value = "http://stackoverflow.com/questions/1962168/scroll-to-the-very-right-of-a-long-text-input";
foo.focus();
foo.setSelectionRange(foo.value.length,foo.value.length);
<input id="foo">  

除 IE/Opera 之外的所有浏览器

如果您不完全关心 IE,则设置Element.scrollLeftElement.scrollWidth. 缺点是浏览器支持较少。

var foo = document.getElementById("foo");
foo.value = "http://stackoverflow.com/questions/1962168/scroll-to-the-very-right-of-a-long-text-input";
foo.scrollLeft = foo.scrollWidth;
<input id="foo">

所有浏览器

如果您想支持每个浏览器,请考虑使用dir您设置为rtl(从右到左)(direction) 属性来欺骗它缺点是它是一个 hack,当它可编辑和/或您开发一个方向敏感的网站时,确实需要考虑它,但这适用于所有浏览器,并且非常适合只读输入。

var foo = document.getElementById("foo");
foo.value = "http://stackoverflow.com/questions/1962168/scroll-to-the-very-right-of-a-long-text-input";
<input id="foo" dir="rtl">  

非常聪明的想法,但如果用户必须手动编辑 URL,它会改变用户的输入行为(它的行为类似于 text-align: right)。
2021-04-21 17:39:04
使用一些 JS 更改dir焦点和模糊属性。
2021-05-03 17:39:04
这是滥用 rtl 属性,这实际上是在告诉浏览器期望从右到左输入(即阿拉伯语或希伯来语等)。即使副作用是最初想要的结果,也很可能导致输入问题。
2021-05-04 17:39:04
我尝试过direction: rtl(与 结合text-align: left),但在输入值以数字开头时遇到了问题;数字会出现在右边为了克服这个问题,我将值括在&lrm;和 中&rlm;,但这有一个问题,即在复制文本时,复制的文本中会出现问号。此外,箭头/home/end 键反向工作。最后它真的是一个黑客,所以我决定去设置scrollLeft
2021-05-09 17:39:04

Lucman Abdulrachman的答案是最好的,但我无法投票,所以我添加了另一个不使用 jQuery 的解决方案:

var elem = document.getElementById('myInput');
elem.focus();
elem.scrollLeft = elem.scrollWidth;
如果更新以编程方式完成,最好在“settimeout”内完成
2021-04-22 17:39:04
很高兴提供赞成票,但除此之外,只需获得必要的代表即可采取适当的行动,
2021-05-12 17:39:04
希望我能不止一次投票。多年来一直在寻找这种行为。
2021-05-13 17:39:04
为什么它是最好的?当然不是。本机方法要容易得多,速度也快得多。
2021-05-14 17:39:04
$('#myInput').get(0).scrollLeft = $('#myInput').get(0).scrollWidth; 
很好的答案。不是完美答案的唯一原因是因为 post 标签不包含 jQuery ......这补充说 scrollLeft 和 scrollWidth 都是普通 Javascript 中的现有功能,所以你间接地正确回答。
2021-05-10 17:39:04
在知道 scrollleft 和 scrollwidth 也确实按预期执行输入之前发现了这一点。很好的答案,再次!:)
2021-05-13 17:39:04

您可以简单地将 CSS 属性方向设置为“rtl”(从右到左),不需要 JS。这将改变滚动方向以及文本对齐方式,因此当文本比输入的大小短时它可能看起来很奇怪,但鉴于输入将始终包含一个长 url,这应该不是问题。

input {
  margin: 10px;
  direction: rtl;
}
<input type="text" value="short url" size="20">
<br>
<input type="text" value="https://developer.mozilla.org/en-US/docs/Web/CSS/direction" size="20">

我希望这有帮助。

这完全改变了键盘导航的行为......解决了一个问题,创造了另一个!小心
2021-04-25 17:39:04
我在禁用字段上使用它并结合 text-align:center ,它的作用就像一个魅力。较短的文本在左侧,较长的文本会自动滚动。
2021-04-25 17:39:04

更好的解决方案是使输入足够大以查看最合理长度的 url。输入的默认宽度通常很短。通过减小字体大小和增加宽度(可能按百分比填充可用空间),您可能可以使 url 与浏览器的 url 栏一样长或长,可见。您实际上并不需要非常大的 url 文本,因为您可能只是在验证它看起来是否合理,而不是阅读它。

如果能够以相对较大的字体查看整个 url 很重要(如果用户预计是高级用户并且可能会手动编辑 url),您应该考虑使用文本区域。url 随机换行看起来有点奇怪,但只要你不插入空格,url 应该仍然有效。

如果您的 Web 服务器负责生成 url,您可以尝试使其不那么冗长。如果您可以使用相对 url(跳过域部分),您还可以节省空间。