javascript - 在放置事件(FF,Chrome)的输入字段中获取插入符号位置(字符索引)

标签 javascript jquery

我希望输入字段只接受数字,因此,在其他技术中,如果输入字段中的结果不是正确的数字,我还阻止了默认的放置事件。为实现这一点,在 IE 中,我将焦点放在要放置文本的字段上,搜索光标位置(字符索引),然后根据旧值和拖动的文本构建新值。

获取插入位置:

IE: Math.abs(document.selection.createRange().moveStart("character", -1000000)) 有效

FF,Chrome: inputfield.selectionStart 不起作用

关于如何在放置处理程序中获取字符索引有什么想法吗?

最佳答案

有很多关于如何在浏览器中实现拖放支持的讨论,但事实是他们想要保护事物。我的意思是理论上你可以打电话

event.dataTransfer.setData("Text", newValue)

在你的 drop handler 里面,但是由于他们说的“安全原因”,它不会工作。很遗憾,因为这对您来说是最好的解决方案,我的意思是在文本被删除之前更改它。

相反,我认为您可以通过一个小的“hack”来解决您的问题

<input id="target" type="text" value="aaa bbb ccc" />
<input id="source" type="text" value="good bad" />

和js

<script type="text/javascript">
    $(function () {
        var drop = false;
        $("#target").bind("drop", function (e) {
            // you can store the dragged text if you like
            //var text = e.originalEvent.dataTransfer.getData("Text");
            drop = true;
        });
        $("#target").bind("focus", function (e) {
            if (drop) {
                // you can get caret here, etc
                $("#target").val($("#target").val().replace("bad", ""));
                drop = false;
            }
        });
    });
</script>

已在 Chrome 中测试,但它应该也适用于所有浏览器。

我希望这就是您要找的。

关于javascript - 在放置事件(FF,Chrome)的输入字段中获取插入符号位置(字符索引),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14274484/

相关文章:

php - 在页面中我有 for 循环函数吗?在 for($i=0;$i<=$max;$i++){ Size 查询中只从 mysql 数据库检索一行?

php - 即使打开,jQuery 也无法更新 PHP 生成的元素。 ('click'

javascript - 我将如何使用 Jquery 来选择内联属性宽度值

javascript - 无法使用 chrome.storage.local.set 保存集

javascript - 在代码后面调用 window.onload 函数不起作用

javascript - 如何从 JavaScript 变量返回特定值

javascript - Mocha 和 Chai ,我如何模拟预期结果?

javascript - rails : Passing controller variable to JS using ERB slows page?

javascript - 从 JS/Jquery 滚动回 DIV 的位置

jquery - 在交替行上更改列表的方向