在contentEditable上使用元素需要两次单击才能进行第一次编辑

时间:2019-03-21 20:29:44

标签: javascript contenteditable

我正在尝试编辑表中保存的数据,并选择在<td>内的div上使用contentEditable,这确实遇到了一个很奇怪的问题。第一次进行编辑时,我必须单击两次,然后每隔两次单击一次。但是在第一次尝试编辑时,我必须单击两次。这是我的HTML中的示例表格行:

<tr style="width:100%"> <td><div class="results" onblur="blurMe(event)" onclick="darkenBox(event)" onkeypress="enterKey(event)" >Adam McGurk</div></td><td><div class="results" onblur="blurMe(event)" onkeypress="enterKey(event)" onclick="darkenBox(event)">amcgurk@shinesolar.com</div></td><td class="delete-sales-person"><span class="delete-icon"></span></td></tr>

这是合适的JS:

//Only to be used with changing data to gray on click and border on hover.
function darkenBox(e){
    const ele = e.path[0];
    ele.setAttribute("contenteditable", true);
    console.log("Editing cell data");
    ele.classList.add("darkenBox")

}

// Allows user to edit content by click
function clickEdit(e) {
    e.path[0].setAttribute("contenteditable", true);
}

//Deleted placeholder text on click
function clearText(e) {
    const ele = e.path[0];
    ele.setAttribute("contenteditable", true);
    ele.innerText='';
}

// Allows user to stop editing by pressing the, "Enter" key.
function enterKey(e){

    const keyCode = e.keyCode;
    const ele = e.path[0];
    if (keyCode === 13) {
        ele.classList.remove("darkenBox");
        ele.setAttribute("contenteditable", false);
    }

}

function blurMe(e) {
    const editedElement = e.path[0];
    editedElement.classList.remove("darkenBox");
}

为什么需要我单击两次才能进行第一次编辑?

2 个答案:

答案 0 :(得分:1)

您的div开始时没有内容可编辑的设置。第一次单击它们时,您将contenteditable设置为true,但是单击已被处理,因此不会触发编辑。 浏览器仅在下次单击时才允许编辑,因为现在contenteditable为true。

直接在html中将contenteditable设置为true,并且应该可以使用。

答案 1 :(得分:1)

第一次单击它会将contenteditable设置为true。单击并不会取消设置。第二次单击时,contenteditable仍为true。这使您可以激活元素并立即对其进行编辑。如果要在第一次单击时进行编辑,则可以启用所有要编辑的元素,并以contenteditable开头。或者,您可以在启用contenteditable之后对元素进行聚焦。

ele.setAttribute("contenteditable", true);
ele.focus();

不相关的说明,目前在Firefox上根本不起作用,我建议您使用e.target而不是e.path[0]