JavaScript selectionchange-EventListener,在document.execCommand上无限触发

标签 javascript html addeventlistener selectionchanged designmode

我已经为 selectionchange 添加了一个事件监听器,如下所示,

document.addEventListener("selectionchange", 
function()
{
    highlight();
    console.log("selectionchange-triggered");
}, false);

然后我添加了以下代码,以突出显示所选文本。

function highlight()
{
    document.designMode = "on";
    document.execCommand("hiliteColor", false, "#ff0000");
    document.designMode = "off";
}

调用高亮功能时,selectionchange 的 EventListener 会无限触发,直到我清除选择。

有人遇到过同样的问题吗?任何人都可以提出解决此问题的解决方案吗?

最佳答案

我建议使用一个简单的标志来防止无限循环。 window.setTimeout()电话是因为selectionchange document.execCommand() 时事件不会同步触发被称为。

演示:http://jsfiddle.net/rzmstcot/5/

代码:

var highlighting = false;

function highlight()
{
    document.designMode = "on";
    highlighting = true;
    document.execCommand("hiliteColor", false, "#ff0000");
    document.designMode = "off";
    window.setTimeout(function() {
        highlighting = false;
    }, 1);
}

document.addEventListener("selectionchange", 
function()
{
    if (!highlighting) {
        highlight();
    }
    console.log("selectionchange-triggered");
}, false);

关于JavaScript selectionchange-EventListener,在document.execCommand上无限触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27126343/

相关文章:

javascript - 如何使用 Math.round 将数字四舍五入到最接近的偶数?

javascript - jQuery 中除 "input"之外的所有内容的自定义上下文菜单

javascript - 浏览器对 element.removeAttribute 的支持是什么?

c# - 你如何在 C# 中获取用户的国家/地区名称?

javascript - 如何仅在单击时将字母颜色更改为白色

javascript - 在 HTML 字段上单击 Enter 时尝试添加一些表单控件,但结果不一致

javascript - html水平滚动鼠标滚动

javascript - 如何向同一个 onclick 事件添加额外的功能?

html - 如何覆盖标记为 !important 的外部 css?

javascript - 当变量定义非常明确时,事件监听器抛出 "Undefined"错误