- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此 Angular Directive(指令)会在数字输入字段中每三位数字自动插入逗号(例如“1000”变为“1,000”)。它在我测试过的所有浏览器中都能正确保留光标位置,但配备三星键盘的三星手机除外,例如运行 Android 7.0、三星体验版 8.1 的 Galaxy S8。
在三星上,如果我输入“1000”,则会插入逗号,并且我的光标最终会位于十位和个位之间,而实际上它应该一直位于右侧。
此问题有任何已知的修复方法吗?
angular.module('someWebApp')
.directive('commaInput', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModelController) {
var el = element[0];
function clean(x) {
while (x.toString().indexOf(",") != -1)
{
x = x.replace(",", "");
}
return x.replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
}
ngModelController.$parsers.push(function(val) {
var cleaned = clean(val);
// Avoid infinite loop of $setViewValue <-> $parsers
if (cleaned === val) return val;
var start = el.selectionStart + cleaned.length - val.length;
var end = el.selectionEnd + cleaned.length - val.length;
// element.val(cleaned) does not behave with
// repeated invalid elements
ngModelController.$setViewValue(cleaned);
ngModelController.$render();
el.setSelectionRange(start, end);
return cleaned;
});
}
}
});
html 输入使用此指令(逗号输入)并具有 type="tel"。
最佳答案
这似乎确实是某些设备的问题。我在三星 S7 设备上遇到了类似的问题。我唯一有效的解决方案是将 setSelectionRange() 方法插入 setTimeout() 中。
setTimeout(() => {
el.setSelectionRange(selStart, selEnd);
});
setTimeout 方法中的毫秒
参数可以省略,因为我们不需要在执行前等待。
关于javascript - 三星键盘光标位置问题JS setSelectionRange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47424580/
这看起来很简单,但它不起作用: document.getElementById('test').setSelectionRange(3,3) test 谷歌浏览器。 最佳答案 var InputEl
此 Angular Directive(指令)会在数字输入字段中每三位数字自动插入逗号(例如“1000”变为“1,000”)。它在我测试过的所有浏览器中都能正确保留光标位置,但配备三星键盘的三星手机除
我有以下一段 JavaScript,用于将 unicode 字符(下面由 txtToIns 变量表示)动态插入到文本正文中 elmt.value = elmt.value.substring(0, e
我在另一个问题上发现了这个: setCaretToPos = function(input, selectionStart, selectionEnd){ if(input.setSel
我做了一个jsFiddle! http://jsfiddle.net/31mts93v/ 我想创建一个以这种方式运行的输入框:当您按左右箭头键时,它会根据光标所在的位置选择(如鼠标选择)上一个单词或下
我很确定我曾经测试过 setSelectionRange 属性的复选框,但他们没有。但在某些浏览器中,情况似乎发生了变化(已测试 Firefox 和 Chrome)。 我过去常常在进行如下选择之前检查
我正在使用 qunit 框架对我在 Chrome 中使用 jquery(即 var $textarea = $(''))以编程方式创建的 HTML 进行单元测试交互。这是我用来更新文本区域中的选择的代
我之前问过为什么 setSelectionRange 不起作用,答案是因为它只适用于输入字段。但我想尝试使用 contenteditable 属性开发电子表格类型的页面。 window.onkeydo
div 中的文本未被选中。我究竟做错了什么? 要进行测试,请双击 div,键入一些文本,然后单击离开。 Example on CodePen . function editIt(div){
我有一个对话框,其中有一个带有 type="time" 的 HTML5 输入字段。在里面。 当对话框出现时,我想将编辑默认为对话框的“分钟”部分。我看不出有什么办法。 这是 jsFiddle尝试使用的
我想保留 HTML 数字字段的光标位置。 $(element).bind('keyup', function (e) { element.val(f($(this).va
我在下面组装了一个基本的 fiddle 。由于某种原因,我的选择器可以检索文本区域框来设置值,但选择器无法使用 setSelectionRange 函数。在控制台上,您会发现错误:.setSelect
我必须在输入字段中(在输入事件中)手动将插入符位置设置为 0。我需要支持 >= IE9。即使在 IE9 中,只要我进行正常输入(按键盘上的键),它就可以正常工作。但是,一旦我使用复制和粘贴,插入符号就
我最初的问题是 this question 的直接欺骗,尝试将光标放在文本区域的末尾。 one two three|<-- ideal position 它在除 Firefox 之外的所有浏览器上运行
我有一个函数可以选择输入 onclick 的前 5 个字符。这适用于第一次点击。当输入框仍然有焦点时,在 chrome 中,前 5 个字符内的第二次单击会删除选择,插入符号会在单击的位置闪烁。 我希望
我正在尝试在 Angularjs 的指令中执行类似的操作。问题是这在系统中工作正常但是当我在 Android 手机中检查相同时它无法设置插入符号位置。我也查看了几个博客和网站,在 Android 设备
我正在处理一些自动完成代码。 setSelectionRange() 用于在 oninput 事件处理程序中选择已完成的文本。它至少适用于 Firefox 14,但不适用于 Chrome(6、17)。
我试图在用户键入时屏蔽电话号码。我已经在 android 2.x 设备上成功地将下面的 javascript 代码与 jquery 和 setTimeout 解决方法一起使用,但我还没有找到适用于 a
JavaScript 函数使用 .setSelectionRange() 选择文本区域中的特定单词。 在 Firefox 中,文本区域会自动向下滚动以显示所选文本。在 Chrome (v14) 中,它
这个问题修改了 question在 r/reactjs 上。 我有一个受控的输入,我可以通过编程方式更改其值。我想使用.setSelectionRange()为了保持输入中插入符号的位置。 除非这不起
我是一名优秀的程序员,十分优秀!