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

问题描述 投票:0回答:2

我正在尝试编辑表中的数据并选择在<td>s内的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)">[email protected]</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");
}

为什么要求我第二次点击它进行编辑?

javascript contenteditable
2个回答
1
投票

你的div开始没有contenteditable集。单击它们(第一次)时,将contenteditable设置为true,但单击已经处理,因此不会触发编辑。只有在下一次点击时,浏览器才会允许编辑,因为现在可以满足。

直接在html中设置contenteditable为true,应该可以正常工作。


1
投票

第一次单击它时,它会将contenteditable设置为true。点击即可解决问题。第二次点击,contenteditable仍然是true。这允许您激活元素并立即编辑它。如果要在第一次单击时对其进行编辑,则可以使用contenteditable启用要编辑的所有元素。或者,您可以在启用contenteditable后关注元素。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.