<script type="text/javascript">
function Test(str)
{
document.getElementById("test").innerHTML += str;
};
function GetPos(obj)
{
obj.focus(); 
var s=document.selection.createRange(); 
s.setEndPoint("StartToStart",obj.createTextRange()) 
Test(s.text.length);
};
</script>
<input type="text" size="16" onclick="GetPos(this)" value="123456789" />onclick选中字符
<br />
<input type="text" size="16" onmouseup="GetPos(this)" value="123456789" />onmouseup选中字符
<hr />
test:<span id="test"></span>
<hr />
例如,用鼠标选中“4567”四个字符,只要是点击在选中字符上,获取的光标位置就不正确。而且onclick和onmouseup得到的值不一样。
</body>

解决方案 »

  1.   

    因为mouseup的时候,selection还没有改变,你获取的仍然是先前的range. 你可以setTimeout来处理。
      

  2.   

    回楼上的,用计时器是不得已是办法。不知道还有没有别的方法。先来说说我的需求:模拟键盘输入。就是点击网页上的按钮,然后在文本框中输入设定的内容。一般情况下,光标在文本框末尾,自然没任何问题,但是如果想在已输入的文本当中插入文字或都替换文本框中选定内容,就只好用createRange来实现,因此需要每一次光标位置发生变化时记录光标位置,我所想到的就是在keyup和click事件记录光标位置。但结果如题。分析了鼠标行为,点击鼠标,如果不是点击在文本框中的选定文本上,keydown时光标位置就已经发生变化;如果点击在选中字符上,keydown时光标位置没有产生变化,keyup后光标位置发生了变化。根据行为结果,如果点击在选中字符上,光标位置变化是发生在keyup事件之后,因此keyup不到正确的光标位置。不知道如何解决这个问题?或许我的思路不对?
      

  3.   

    上文都写错了,鼠标行为是mousedown和mouseup。