是否存在与IE遗留onselectionchange对应的标准跨浏览器HTML5事件(因此当当前选择更改时会触发)?
已编辑,我希望跟踪Selection object更改。
答案 0 :(得分:2)
使用onchange
我建议使用jQuery来避免这些跨浏览器问题,但这并不意味着您应该跳过测试。 see here
查看 Rangy window.getSelection = rangy.getSelection
它可能有用......
/*
IE 8 getSelection() missing object and properties simple hack
*/
if (window.getSelection == undefined) { /* IE? */
var wgS = setInterval(function(){ /* wait for Rangy */
if (rangy.initialized) {
window.getSelection = rangy.getSelection; /* do the stuff */
clearTimeout(wgS); /* exit */
}
}, 10);
}
来源:网站
答案 1 :(得分:2)
您可以在keyup事件处理程序中找到光标位置。例如
function getCursorPos(evt){
if(window.getSelection){
var sel=document.getSelection();
if(sel.rangeCount==0){return;}
var range = sel.getRangeAt(0);
var p=range.startOffset;
}else{
var sel=document.selection;
if(sel){
var range=sel.createRange();
var p=range.offsetLeft;}
}
document.getElementById('myoutposition').innerHTML=p;
}
if(addEventListener){
document.getElementById('myeditbox').addEventlistener('keyup',getCursorPos,false);
}
else{
document.getElementById('myeditbox').attachEvent('onkeyup',getCursorPos);}
<textarea id="myeditbox" style="width:100%;height:100px;"></textarea><br/>
the current cursor position is <output id="myoutposition">0</output>
答案 2 :(得分:1)
永远不会太晚:
// IE
myEditableElement.onselectionchange = onSelectionChange;
// work on chrome, untested on firefox
myEditableElement.addEventListener('focus', function (event) {
document.addEventListener('selectionchange', onSelectionChange);
});
myEditableElement.addEventListener('focusout', function (event) {
document.removeEventListener('selectionchange', onSelectionChange);
});
// Event
function onSelectionChange (event) {
// todo
}
答案 3 :(得分:0)
标准为onchange
:
<select id="myName" onchange="myMethod(this)">
...
</select>
这也可以用于文本框等。
答案 4 :(得分:0)
您可能需要查看onChange属性。
<input type='text' onChange='alert(this.value)'>
当更改元素的值时会发生onchange事件。
对于单选按钮和复选框,当更改检查状态时会发生onchange事件。