[javascript] 더블 클릭 후 텍스트 선택 방지

내 웹 응용 프로그램의 범위에서 dblclick 이벤트를 처리하고 있습니다. 부작용은 더블 클릭이 페이지에서 텍스트를 선택한다는 것입니다. 이 선택이 발생하지 않도록하려면 어떻게해야합니까?



답변

function clearSelection() {
    if(document.selection && document.selection.empty) {
        document.selection.empty();
    } else if(window.getSelection) {
        var sel = window.getSelection();
        sel.removeAllRanges();
    }
}

IE 이외의 모든 브라우저 및 IE10의 범위에 이러한 스타일을 적용 할 수도 있습니다.

span.no_selection {
    user-select: none; /* standard syntax */
    -webkit-user-select: none; /* webkit (safari, chrome) browsers */
    -moz-user-select: none; /* mozilla browsers */
    -khtml-user-select: none; /* webkit (konqueror) browsers */
    -ms-user-select: none; /* IE10+ */
}


답변

일반 자바 스크립트에서 :

element.addEventListener('mousedown', function(e){ e.preventDefault(); }, false);

또는 jQuery를 사용하여 :

jQuery(element).mousedown(function(e){ e.preventDefault(); });


답변

두 번 클릭 한 후에 만 ​​텍스트를 선택하지 못하게하려면 :

당신은 MouseEvent#detail재산을 사용할 수 있습니다 . 마우스 다운 또는 마우스 업 이벤트의 경우 1에 현재 클릭 수를 더한 값입니다.

document.addEventListener('mousedown', function (event) {
  if (event.detail > 1) {
    event.preventDefault();
    // of course, you still do not know what you prevent here...
    // You could also check event.ctrlKey/event.shiftKey/event.altKey
    // to not prevent something useful.
  }
}, false);

참조 https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail를


답변

FWIW, 내가 설정 user-select: none받는 부모 요소 어떻게 든 부모 요소에 때 더블 클릭의 어느 곳을 선택하지 않으려는 것을 그 자식 요소. 그리고 작동합니다! 멋진 것은 contenteditable="true"텍스트 선택 등이 여전히 자식 요소에서 작동한다는 것입니다!

그처럼:

<div style="user-select: none">
  <p>haha</p>
  <p>haha</p>
  <p>haha</p>
  <p>haha</p>
</div>


답변

페이지 요소 내의 내용을 선택할 수 없게 만드는 간단한 Javascript 함수 :

function makeUnselectable(elem) {
  if (typeof(elem) == 'string')
    elem = document.getElementById(elem);
  if (elem) {
    elem.onselectstart = function() { return false; };
    elem.style.MozUserSelect = "none";
    elem.style.KhtmlUserSelect = "none";
    elem.unselectable = "on";
  }
}


답변

Angular 2+ 용 솔루션을 찾는 사람들을 위해 .

mousedown테이블 셀 의 출력을 사용할 수 있습니다 .

<td *ngFor="..."
    (mousedown)="onMouseDown($event)"
    (dblclick) ="onDblClick($event)">
  ...
</td>

그리고 경우에 방지하십시오 detail > 1.

public onMouseDown(mouseEvent: MouseEvent) {
  // prevent text selection for dbl clicks.
  if (mouseEvent.detail > 1) mouseEvent.preventDefault();
}

public onDblClick(mouseEvent: MouseEvent) {
 // todo: do what you really want to do ...
}

dblclick예상대로 출력 작업을 계속합니다.


답변

또는 mozilla에서 :

document.body.onselectstart = function() { return false; } // Or any html object

IE에서는

document.body.onmousedown = function() { return false; } // valid for any html object as well