【发布时间】:2021-11-25 23:47:11
【问题描述】:
我正在尝试在 React 中创建一个自定义文本编辑器,因此我创建了一个具有 contentEditable 属性的 div。现在我想在用户选择输入文本的一部分时执行一些操作。为此,我在我的 div 上使用 select 事件作为 onSelect 属性。问题是,select 事件不仅在选择文本时运行,而且在我单击输入框或任何输入后运行。如何防止它,以便仅在选择文本时触发它?
组件:
function EditorBody(props) {
return (
<div className="editor-body">
<div
className="text-section"
contentEditable
role="textbox"
placeholder="Text goes here ..."
onSelect={() => window.alert("You've selected a text")} // Runs after every input, not only when the text is selected
></div>
</div>
);
}
export default EditorBody;
【问题讨论】:
-
当您说“用户选择了输入文本的一部分”时,您是指突出显示文本,还是只是将光标放在某个特定文本附近的某处?
-
@silencedogood,是的,我的意思是突出显示它
-
@silencedogood 不幸的是,并非如此。我的问题是即使在每次输入之后都会触发事件,而通常情况下它不应该触发。
-
嗯...正如该答案指出的那样,如果您希望选择突出显示的文本,我认为在这里使用 onMouseUp 将是一个更合适的事件。使用此事件,您可以检查选择是否大于零。如果是,请运行您的选择方法。如果没有,什么也不做。
标签: javascript reactjs select textbox contenteditable