我有一个带有一些文本结构的网页。我希望该结构能够以“就地”方式进行编辑。
在某些情况下,这相当容易(至少到目前为止)。我制作了在文本上onclick
设置的事件display: none
并创建了一个输入。然后我设置了一些事件来使用 AJAX 保存新内容。有问题的是取消版本。在这里,我将使用onblur
触发删除<input>
字段并使文本再次可见的事件来实现。
HTML 示例 1:
<div class="text_bar">
<div class="text" onclick="edit(this.parentNode)"></div>
</div>
JS片段:
function edit(parentElement){
function cancelEditing(){
textInput.onblur = null // for Chrome
textInput.parentNode.removeChild(textInput)
text.style.display = 'inline-block'
}
var text = parentElement.getElementsByClassName('text')[0]
var textInput = document.createElement('input')
textInput.setAttribute('type','text')
textInput.value = text.textContent
textInput.onkeydown = function(event){
/* not that important */
}
textInput.onblur = cancelEditing
text.style.display = 'none';
parentElement.insertBefore(textInput, text.nextElementSibling)
textInput.focus()
}
然而,在某些情况下,两个文本密切相关。所以我想展示两个<input>
元素,问题在于取消。我希望用户能够在输入之间自由切换(使用鼠标或键盘),但如果用户点击其他地方,字段需要关闭。
HTML 示例 2:
<div class="text_bar">
<div class="prefix" onclick="edit(this.parentNode)"></div>
<div class="text" onclick="edit(this.parentNode)"></div>
</div>
不幸的是 onblur fires
before onclick
,否则如果单击其他输入并且问题将得到解决,我可以例如停止传输事件。但事实并非如此。我该如何解决?