더블 클릭 후 텍스트 선택 방지
내 웹 응용 프로그램의 범위에서 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 {
-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";
}
}
또는 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
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
예상대로 출력 작업을 계속합니다.
오래된 스레드이지만 객체에 바인딩 된 모든 것을 비활성화하지 않고 페이지에서 임의의 원치 않는 텍스트 선택 만 방지하기 때문에 더 깨끗하다고 생각되는 솔루션을 생각해 냈습니다. 그것은 간단하고 나를 위해 잘 작동합니다. 다음은 예입니다. "arrow-right"클래스가있는 객체를 여러 번 클릭하면 텍스트 선택을 방지하고 싶습니다.
$(".arrow-right").hover(function(){$('body').css({userSelect: "none"});}, function(){$('body').css({userSelect: "auto"});});
HTH!
개별 요소에서 IE 8 CTRL 및 SHIFT 클릭 텍스트 선택을 방지하려면
var obj = document.createElement("DIV");
obj.onselectstart = function(){
return false;
}
문서에서 텍스트를 선택하지 못하게하려면
window.onload = function(){
document.onselectstart = function(){
return false;
}
}
어떤 방법 으로든 텍스트를 두 번 클릭 할 때만 텍스트를 선택하지 못하게하려면 user-select: none
css 특성을 사용할 수 있습니다 . Chrome 68에서 테스트했지만 https://caniuse.com/#search=user-select 에 따르면 다른 현재 일반 사용자 브라우저에서 작동해야합니다.
동작 적으로 Chrome 68에서는 하위 요소로 상속되며 요소를 포함하고 포함하는 텍스트를 선택한 경우에도 요소에 포함 된 텍스트를 선택할 수 없습니다.
나는 같은 문제가 있었다. 전환 <a>
하고 추가 하여 문제를 해결했습니다. onclick="return false;"
클릭하면 브라우저 기록에 새 항목이 추가되지 않습니다.
참고 URL : https://stackoverflow.com/questions/880512/prevent-text-selection-after-double-click
'Programing' 카테고리의 다른 글
텍스트 영역의 비정상적인 모양? (0) | 2020.03.26 |
---|---|
double이 NaN과 같은지 어떻게 테스트합니까? (0) | 2020.03.26 |
여러 파일에서 문자열을 검색하고 Powershell에서 파일 이름을 반환하는 방법은 무엇입니까? (0) | 2020.03.26 |
모바일 레이아웃에서 Bootstrap 3 열 순서를 어떻게 변경합니까? (0) | 2020.03.26 |
변수 값에서 팬더 DataFrame을 생성하면 "ValueError : 모든 스칼라 값을 사용하는 경우 인덱스를 전달해야합니다"가 발생합니다. (0) | 2020.03.26 |