Javascript “onselectionchange”的HTML5事件`
是否有一个标准的跨浏览器HTML5事件对应于IE legacy(因此当当前选择更改时会触发)Javascript “onselectionchange”的HTML5事件`,javascript,html,dom,Javascript,Html,Dom,是否有一个标准的跨浏览器HTML5事件对应于IE legacy(因此当当前选择更改时会触发) 已编辑,我希望跟踪更改。标准是onchange: <select id="myName" onchange="myMethod(this)"> ... </select> ... 这也可用于文本框等 请参阅。您可能需要查看onChange属性 <input type='text' onChange='alert(this.value)'> 当元素的值发生更
已编辑,我希望跟踪更改。标准是
onchange
:
<select id="myName" onchange="myMethod(this)">
...
</select>
...
这也可用于文本框等
请参阅。您可能需要查看onChange属性
<input type='text' onChange='alert(this.value)'>
当元素的值发生更改时,将发生onchange事件
对于单选按钮和复选框,当选中状态已更改时,会发生onchange事件。使用
onchange
我建议使用jQuery来避免这些跨浏览器问题,但这并不意味着您应该跳过测试
查看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);
}
来源:Web您可以在keyup事件处理程序上找到光标位置。例如 函数getCursorPos(evt){ if(window.getSelection){ var sel=document.getSelection(); 如果(sel.rangeCount==0){return;} var范围=选择范围(0); var p=范围.startOffset; }否则{ var sel=文件选择; 如果(sel){ var range=sel.createRange(); var p=range.offsetLeft;} } document.getElementById('myoutposition')。innerHTML=p; } if(addEventListener){ document.getElementById('myeditbox')。addEventlistener('keyup',getCursorPos,false); } 否则{ document.getElementById('myeditbox').attachEvent('onkeyup',getCursorPos);}
当前光标位置为0
永远不会太晚:
// 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
}
onchange
有什么问题吗?我可能错了,但是当元素的内容更改时,onchange
不会被解雇吗?我关注的是光标位置的变化,而不是内容的变化。事实上,当内容失去焦点时会触发onchange。您想在文本选择发生变化时触发事件吗?@DeepSharma,是的,当document.getSelection().anchorNode
或document.getSelection().anchorOffset
发生变化时。我可以使用定时器与任何HTML5浏览器异步跟踪,也可以使用IE9/10同步跟踪。当我简单地将插入符号移动到
中时,onchange
是否会被触发onselectionchange
确实如此,这正是我想要的。不,onchange
在您进行更改后会被触发。因此,在文本区域
中,它只会在用户离开字段后触发(通过提交表单或键入TAB或…)。好了,没有HTML5能和你的要求相媲美。谢谢。我想我得用定时器来跟踪它。对不起,onchange
对我的要求不起作用。从功能上讲,onchange
和onselectionchange
即使在IE中也是不同的。我感谢你的努力,但我只是问是否存在像IE的onselectionchange
这样的标准HTML5事件。如果没有这样的标准事件,我会接受你的回答,但我想先等一会儿。我很惊讶有一个标准的Selection
DOM API,但是没有跟踪选择更改的标准事件。你有什么解决方案吗?没有,我将在IE中使用onselectionchange
,并在其他浏览器下进行模拟。如果Rangy支持HTML5选择API,我可能会使用它。非常感谢。