查明所选文本是否在输入字段或文本区域内

Find out if a selected text is inside a input field or textarea

本文关键字:文本 字段 区域 输入 是否      更新时间:2023-09-26

我正在创建一个chrome扩展。

当你选择一个文本时,我在网页上添加了两个按钮。

如果选择在文本区或输入框内,我不希望发生任何操作。

这是我目前使用的代码

$(document).on("mouseup", function(e) {
    var class1=e.target.nodeName;
    var class2=e.target.firstChild;
    console.log(class1);
    console.log(class2);
    if(class1=="INPUT" || class1=="TEXTAREA"){
    }
    else{
    var selectedtext=window.getSelection().toString();
    var chars=selectedtext.length;
if(chars>2){
    var posx=e.clientX;
    var posy=e.clientY;
    var scrollDepth=$(window).scrollTop();
    posy=posy+scrollDepth;
    var location=findSelectionCoords(posx,posy);
    create_Button(location);
}
}
});

Create button函数用于创建按钮。

如果用户在文本区/输入框中选择了一些文本,此功能将工作,控制台显示输入/文本区。但有时文本区或输入框也会被选中然后这个函数就会失败。在class1中,我在这种情况下得到DiV。

有没有人建议一个函数可以在所有情况下工作,并检测文本选择是否在输入或文本区域内

Thanks in advance

下面是示例代码,其中只有当mouseup事件来自非文本类型的textareainput元素时才显示警告消息。

编辑代码:

$(function() {
    var isInputOrTextarea = false;
	$(document).on("mousedown", function(e) {
        // On mousedown flag whether it was clicked in input or textarea
        if($(e.target).is("textarea,input[type=text]")) {
            isInputOrTextarea = true;
        }
    });    
	$(document).on("mouseup", function(e) {
        if($(e.target).is("textarea,input[type=text]") || isInputOrTextarea) {
            isInputOrTextarea = false;
            return;
        }
        isInputOrTextarea = false;
        alert("Not in text area or input");
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text" value="Lorem ipsum"/>
<textarea>
    Lorem ipsum
</textarea>
<p>
    Lorem ipsum
</p>
   

只是在javascript中,一个如何从输入中清除事件的示例。这是一行。

document.onkeydown = function (ev) {
  switch (ev.key) {
    case 'ArrowRight':
      if (!ev.shiftKey && ['INPUT','TEXTAREA'].indexOf(ev.srcElement.nodeName) == -1)
        advance();
      break;
    default:
      console.log(ev.key);
  }
};