css 单击输入字段的填充会将光标置于行首,而不是行尾

v09wglhw  于 2022-12-05  发布在  其他
关注(0)|答案(8)|浏览(138)

在定义了一些填充的HTML输入字段上,单击填充区域会将光标设置在行首而不是行尾。
为什么会发生这种情况?这种行为的用例是什么?如何防止这种情况并始终将光标移动到行尾?

<input style="padding:25px;font-size:25px" value="hello" />

https://jsfiddle.net/sf4x3uzL/1

z4bn682m

z4bn682m1#

检查代码片段,代码有点长,但在所有情况下都能工作。
这里添加了一个函数来检查点击是否来自here的填充区域
添加了另一个函数来获取插入符号位置,并将这两个函数结合起来以获得所需的结果。
第一个

wbgh16ku

wbgh16ku2#

您可以使用setSelectionRange将光标位置设置为单击时input元素的末尾。
第一个

bwitn5fc

bwitn5fc3#

试试这个!!

$("input").click(function(){
  this.focus();
});
8dtrkrch

8dtrkrch4#

您可以使用setSelectionRange在结尾处使用[-1,-1] position设置插入符号位置。

<input style="padding:25px;font-size:25px;border:1px solid #c0d9bc;outline:2px solid #6fae62" onclick="this.setSelectionRange(-1,-1)" value="hello" />
tktrz96b

tktrz96b5#

一个简单的解决方案是将垂直填充设置为0,并调整行高以获得正确的输入高度。
此解决方案仅适用于输入:在文本区域的情况下,巨大的行高度可能是个问题。

<input style="padding:0 25px; line-height:3.48; font-size:25px" value="hello" />
ghg1uchk

ghg1uchk6#

我发现这只在堆栈,但似乎是一个体面的解决方案,它总是设置值和光标的文本结束。

<input style="padding:25px;font-size:25px" value="hello" 
 onfocus="this.value = this.value;" />.

我希望这对你有用

evrscar2

evrscar27#

就我所知,点击填充仍然是 * 就像 * 点击<input>本身一样。似乎接下来会发生什么取决于浏览器或操作系统中的一些特定实现。例如,在macOS + Chrome上,它的行为方式与您描述的一样,但在Windows中,它的行为方式可能会不同。不过,我的方法只会是CSS。
首先,将您的输入封装在标签中,这一点很重要,这样,如果您单击 * 虚拟填充 *,<input>将自动获得焦点。

<label class="custom-input">
  <input value='Hello' />
</label>

最后是CSS:

.custom-input {
 display: inline-block;
 border: 1px solid #ccc;
 padding: 25px;
}

.custom-input > input {
  padding: 0;
  font-size: 25px;
  border: 0 none;
  outline: none;
}

https://jsfiddle.net/4ysdt7z0/17/

ahy6op9u

ahy6op9u8#

我也可以使用MacBook Pro在Chrome和Safari上重现这种行为。
我的解决方法是使用行高而不是填充来设置字段的垂直间距,这不是跨设备测试的,但至少是跨浏览器测试的:
因此,我使用的不是padding: .75rem;,而是:

padding: 0 .75rem;
line-height: 2.5rem;

这并不是一个完整的修复,因为单击输入的边框仍然会将光标设置为索引0,但至少它比垂直填充对我来说效果更好。

相关问题