"滚动"到长文本输入的右侧

Pek*_*ica 14 html javascript css

我有一个图像选择器,允许从图库中选择一个图像,然后将URL填入一个<input type="text">字段.URL可能非常长,并且始终在文本字段中看到URL的前半部分具有非常小的信息值.

有人知道一种"滚动"到文本字段右侧的方法,以便URL的末尾可见而不是开头吗?没有诉诸textarea.

Bal*_*usC 22

除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);
Run Code Online (Sandbox Code Playgroud)
<input id="foo">  
Run Code Online (Sandbox Code Playgroud)

除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;
Run Code Online (Sandbox Code Playgroud)
<input id="foo">
Run Code Online (Sandbox Code Playgroud)

所有浏览器

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

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

  • 这是滥用rtl属性,这实际上告诉浏览器期望从右到左的输入(即阿拉伯语或希伯来语等).即使副作用最初是期望的结果,也很可能导致输入问题. (5认同)
  • 非常聪明的想法,但它改变了用户的输入行为,如果他们必须手动编辑URL(它的行为类似于text-align:right). (2认同)
  • 使用一些 JS 更改焦点和模糊上的 `dir` 属性。 (2认同)

Ste*_*ser 20

Lucman Abdulrachman的答案是最好的,但我不能赞成它,所以我在不使用jQuery的情况下添加另一个解决方案:

var elem = document.getElementById('myInput');
elem.focus();
elem.scrollLeft = elem.scrollWidth;
Run Code Online (Sandbox Code Playgroud)


小智 17

$('#myInput').get(0).scrollLeft = $('#myInput').get(0).scrollWidth; 
Run Code Online (Sandbox Code Playgroud)