javascript - 单击输入字段的填充将光标设置在行首,而不是行尾

标签 javascript html css

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

enter image description here

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

https://jsfiddle.net/sf4x3uzL/1

最佳答案

检查代码段,代码有点长,但可以在所有场景中工作。

这里添加了一个函数来检查点击是否来自 here 的填充区域

添加了另一个函数来获取插入符号的位置,并将这两个函数结合起来以获得所需的结果。

var carPos = 0;
(function($) {
  var isPaddingClick = function(element, e) {
   	var style = window.getComputedStyle(element, null);
    var pTop = parseInt( style.getPropertyValue('padding-top') );
    var pRight = parseFloat( style.getPropertyValue('padding-right') );
    var pLeft = parseFloat( style.getPropertyValue('padding-left') );  
    var pBottom = parseFloat( style.getPropertyValue('padding-bottom') );
    var width = element.offsetWidth;
    var height = element.offsetHeight;
    var x = parseFloat( e.offsetX );
    var y = parseFloat( e.offsetY );  
    return !(( x > pLeft && x < width - pRight) &&
             ( y > pTop && y < height - pBottom))
  }
  $.fn.paddingClick = function(fn) {
    this.on('click', function(e) {
      if (isPaddingClick(this, e)) {
      	e.target.setSelectionRange(carPos, carPos);
        fn()
      }
    })   
    return this
  }
}(jQuery));


$('input').paddingClick()
$('input').bind('click keyup', function(event){
		carPos = event.target.selectionStart;
})
.as-console{ display:none!important}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input style="padding:25px;font-size:25px" value='hello' />

关于javascript - 单击输入字段的填充将光标设置在行首,而不是行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58732887/

相关文章:

PHP/HTML - 表格无法正确显示

html - Shinydashboard:将主标题标题与侧边栏一起折叠

HTML/CSS 标签显示独特的内容

html - 如何防止 "a"样式应用于链接?

javascript - 如何在 javascript 中进行整数除法(在 int 中获取除法答案而不是 float)?

javascript - 添加参数或添加数组?

php - fatal error : Call to a member function pg_fetch_object()

javascript - 如果为 NULL,则更改数组文本框的 bgcolor

javascript - 父元素中子元素的 jQuery 索引

javascript - 在 Redux reducer 中对对象数组进行排序