我希望输入字段仅接受数字,因此,除其他技术外,如果输入字段中的结果不是正确的数字,我还阻止了默认的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/