Div with contenteditable =“true” - 更改DOMSubtreeModified事件中的innerHTML做不定式循环

时间:2015-06-12 17:50:57

标签: javascript jquery html html5

我有<div id="namingSchemes" contenteditable="true"></div>

在这个div上我有事件:

$('#namingSchemes').bind("DOMSubtreeModified", changeSchemaName);

function changeSchemaName(s) {      
    s.currentTarget.innerHTML = "<span>" + s.currentTarget.innerHTML + "</span>";
}

当我尝试更改innerHTML时出现我的问题。它将再次触发我的changeSchemaName,并且我有不定式循环。

我需要的是可编辑的DIV,当此DIV中的文本被更改时,我将进行一些其他调整,例如将此文本包装到SPAN。

Example - 在这里我添加unbind以防止不定式循环,但第二次当我尝试更改值时,我的事件changeSchemaName未被触发。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

看起来您在值周围添加了<span>,所以为什么不忽略更改,如果它已经以<span>开头,就像这样:

function changeSchemaName(s) {      
    if (s.currentTarget.innerHTML.indexOf("<span>") < 0 {
        s.currentTarget.innerHTML = "<span>" + s.currentTarget.innerHTML + "</span>";
    }
}

这样一来,如果已经定义了span,你就不会继续设置它。

或者你可以使用unbind删除绑定,而你的功能是这样的:

function changeSchemaName(s) {      
    $('#namingSchemes').unbind("DOMSubtreeModified", changeSchemaName);
    s.currentTarget.innerHTML = "<span>" + s.currentTarget.innerHTML + "</span>";
    $('#namingSchemes').bind("DOMSubtreeModified", changeSchemaName);
}