2

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

要获得插入符号位置:

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

FF,铬: inputfield.selectionStart不工作

任何想法如何在放置处理程序中获取字符索引?

4

2 回答 2

1

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

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

在您的放置处理程序中,但由于他们说的“安全原因”,它无法工作。很遗憾,因为这对您来说是最好的解决方案,我的意思是在文本被删除之前更改文本。

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

<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 中进行了测试,但它也应该适用于所有浏览器。

我希望这就是你要找的。

于 2013-01-11T10:25:33.200 回答
-1

访问以下链接

https://groups.google.com/forum/?fromgroups=#!topic/javascript-information-visualization-toolkit/GJVG2laTaUo

我认为它对你有用。

于 2013-01-11T09:08:41.903 回答