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

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

然后我添加了下面的代码,以突出显示选定的文本。
function highlight()
{
    document.designMode = "on";
    document.execCommand("hiliteColor", false, "#ff0000");
    document.designMode = "off";
}

当调用highlight函数时,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 - JavaScript selectionchange-EventListener,在document.execCommand上无限触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27126343/

10-11 08:05