2015-09-24 41 views
2

我正在創建一個Chrome擴展。找出選定的文本是否在輸入字段或文本區域內

無論何時您選擇文本,我都會在與選擇相鄰的網頁上添加兩個按鈕。

如果所選內容位於textarea或Input框內,我不希望發生任何操作。

這裏是我使用當前

$(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); 
} 
} 
}); 

創建按鈕功能被用來創建按鈕的代碼。

如果用戶在文本區域/輸入框中選擇了一些文本,該功能可以正常工作,控制檯將顯示input/textarea。 但有時候textarea或輸入框也被選中,然後這個函數失敗。在這個例子中,我得到了DiV。

可有一個建議,將適用於所有情況,並檢測文本的選擇是一個輸入或文本區域內

在此先感謝

回答

0

這裏的功能是示例代碼,其中的警示消息僅在mouseup事件來自不是textareainput類型文本的元素時纔會顯示。

編輯的代碼:

$(function() { 
 
    var isInputOrTextarea = false; 
 
\t $(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; 
 
     } 
 
    });  
 
\t $(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> 
 

+0

感謝您的幫助,但是此代碼面臨着我的代碼面臨的同樣的問題。嘗試選擇文本並點擊輸入框的邊框。您將收到消息「不在文本區域或輸入」 –

+0

在瀏覽器中您正在嘗試嗎?你真的想實現什麼?因爲它在工作。消息「不在文本區域或輸入中」僅顯示,並且僅當您釋放鼠標按鈕時不在輸入或文本區域中時,如果觸摸輸入的邊框或不是如此。那麼,你想要相反還是什麼? – xxxmatko

+0

這是一個問題,在某些情況下,用戶做出選擇並且他的鼠標離開輸入框,這在某些時候自然發生。然後顯示警報消息。我不希望發生這種情況。有沒有一個可以幫助你的功能 –

0

就在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); 
    } 
}; 
相關問題