我是js-development的新手。我有以下代码:
<html>
<body>
<div><span id="inline">Click here to start editing</span></div>
<script>
var inline = document.getElementById("inline");
inline.onclick = function() {
if (!inline.editable) {
var text = inline.innerText;
inline.innerHTML = "<input type='text' id='inline-editable'>";
inline.editable = true;
var inline_editable = document.getElementById("inline-editable");
inline_editable.value = text;
inline_editable.onblur = function() {
var value = inline_editable.value;
inline.editable = false;
inline.innerHTML = value;
}
inline_editable.onkeypress = function(event) {
if (event.keyCode == 13) {
inline_editable.onblur();
}
}
}
}
</script>
</body>
</html>
在span
中显示一些文字,并允许内联编辑。当我在onblur
事件中完成编辑时,它完全正常。但是如果我想通过Enter终止编辑并使用相同的处理程序,我会在此行中收到错误NotFoundError: DOM Exception 8
:
inline.innerHTML = value;
然而一切都按照我的预期运作。任何人都可以帮我避免这个错误吗?
我认为这是发生的,因为我在事件处理未完成时销毁inline-editable
元素并且它想要调用onchange
。我是否应该一直有2个控制来改变他们的可见度?
提前致谢。
答案 0 :(得分:1)
这里的问题是onblur被触发两次,第二次,元素不存在导致问题。杀死事件
var inline = document.getElementById("inline");
inline.onclick = function() {
if (!inline.editable) {
var text = inline.innerText;
inline.innerHTML = "<input type='text' id='inline-editable'>";
inline.editable = true;
var inline_editable = document.getElementById("inline-editable");
inline_editable.value = text;
inline_editable.onblur = function() {
this.onblur = function(){};
var value = this.value;
inline.editable = false;
inline.innerHTML = value;
}
inline_editable.onkeypress = function(event) {
if (event.keyCode == 13) {
this.onblur();
}
}
}
}