我希望输入字段仅接受数字,因此,除其他技术外,如果输入字段中的结果不是正确的数字,我还阻止了默认的drop事件。为此,在IE中,我将重点放在放置文本的位置,搜索光标位置(字符索引),然后从旧的文本和拖动的文本中构造新的值。

要获得插入符位置:

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

FF,Chrome:inputfield.selectionStart不起作用

有什么想法可以在放置处理程序中获取字符索引吗?

最佳答案

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

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


他们说,在您的放置处理程序内部,但由于“安全原因”而无法使用。很遗憾,因为这对您而言是最佳解决方案,我的意思是在删除文本之前先对其进行更改。

相反,我认为您可以通过小的“ 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/

10-16 17:48