Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “onselectionchange”的HTML5事件`_Javascript_Html_Dom - Fatal编程技术网

Javascript “onselectionchange”的HTML5事件`

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)'> 当元素的值发生更

是否有一个标准的跨浏览器HTML5事件对应于IE legacy(因此当当前选择更改时会触发)


已编辑,我希望跟踪更改。

标准是
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,我可能会使用它。非常感谢。