jQuery select 이벤트는 textarea
및 input:text
으로 제한됩니다. <div>
과 같은 일반 요소에서 선택을 처리하는 방법이 있습니까?텍스트 영역 및 입력 외부 선택 선택 방법
2
A
답변
3
jQuery의 select
이벤트는 기본 브라우저 select
이벤트를 랩핑합니다. IE 및 WebKit의 모든 종류의 선택에 대해 발생하지만 다른 브라우저에서는 입력 및 텍스트 영역에서만 발생합니다. 당신은 완벽하게 작동의 누가, 누구에게도 비슷한 답변을 많이 볼 수 있습니다
- Selected text event trigger in Javascript
- Can I get a Javascript event from the selection of text outside of text or textarea?
:
는이 질문은 전에 몇 번을왔다. 첫째, 키보드로 선택하거나 편집 및 컨텍스트 브라우저 메뉴에서 "모두 선택"옵션을 통해 선택을 고려해야합니다. 두 번째로, 선택 텍스트를 보면서 선택 변경을 확인하는 것은 전적으로 신뢰할 만하지 않습니다. 사용자가 문서의 다른 위치에서 동일한 텍스트를 선택하면 해당 텍스트가 선택되지 않습니다.
다음은 대부분의 문제를 해결하는 코드입니다. 선택 사항을 폴링하지 않으면 편집 및 컨텍스트 메뉴에서 "모두 선택"에 대해 수행 할 수있는 작업이 없습니다.
var addSelectHandler = function(callback) {
var selectionChangeEventHandler;
if (typeof window.getSelection != "undefined" && typeof document.addEventListener != "undefined") {
var previouslySelected = null;
var rangesEqual = function(r1, r2) {
return r1.startContainer === r2.startContainer && r1.startOffset === r2.startOffset &&
r1.endContainer === r2.endContainer && r1.endOffset === r2.endOffset;
};
selectionChangeEventHandler = function() {
var sel = window.getSelection(), selectedRanges = [], range;
var changed = !previouslySelected || (sel.rangeCount != previouslySelected.length);
for (var i = 0, len = sel.rangeCount; i < len; ++i) {
range = sel.getRangeAt(0).cloneRange();
selectedRanges[i] = range;
if (!changed && !rangesEqual(range, previouslySelected[i])) {
changed = true;
}
}
previouslySelected = selectedRanges;
if (changed) {
callback();
}
};
document.addEventListener("mouseup", selectionChangeEventHandler, false);
document.addEventListener("keyup", selectionChangeEventHandler, false);
} else if (typeof document.selection != "undefined" && typeof document.attachEvent != "undefined") {
// This is IE, which fires a selectionchange event for any selection
document.attachEvent("onselectionchange", callback);
}
};
addSelectHandler(function() {
alert("Selection changed");
}
2
function getSelText()
{
var txt = '';
if (window.getSelection)
{
txt = window.getSelection();
}
else if (document.getSelection)
{
txt = document.getSelection();
}
else if (document.selection)
{
txt = document.selection.createRange().text;
}
return txt;
}
$(document).mouseup(function() {
alert(getSelText());
});
jQuery에 하나가 있는지 알 수 없지만이 플러그인을 사용하여 mouseup 이벤트를 연결하는 새 플러그인을 만들 수 있습니다.
관련 문제
- 1. HTML 선택 및 텍스트 입력
- 2. HTML 선택 또는 텍스트 영역
- 3. JQuery 이미지 선택 영역
- 4. 버튼을 누를 때 텍스트 영역 텍스트 선택 및 복사
- 5. NSButton의 선택 가능 영역
- 6. 화면 영역 선택
- 7. Google지도 영역/이웃 선택
- 8. html로 텍스트의 선택 영역 조정
- 9. OpenCV 극좌표 변환 선택 영역
- 10. 텍스트 선택 또는 동시에 여러 텍스트 선택
- 11. 입력 유형의 선택 색상 스타일 = 텍스트, 가능합니까?
- 12. CKEditor 및 텍스트 영역 미리 입력
- 13. 해제 텍스트 선택 및 예외
- 14. 텍스트 선택 및 버블 링
- 15. 외부 링크에서 썸네일 선택
- 16. IE 입력 선택 상자
- 17. 외부 신뢰 - 선택 영역 대 넓은 도메인 WCF SSPI 실패
- 18. GWT - 영역 선택/이미지 맵
- 19. 입력 태그 선택 - 클릭시 중간 날짜 선택
- 20. 배경 이미지의 pngfix가 텍스트 선택 및 입력 요소를 사용하지 않습니다.
- 21. PHP 및 선택 방법?
- 22. jqgrid 입력 폭 선택
- 23. jquery 입력 선택
- 24. 더 나은 텍스트 영역 입력
- 25. 입력란 정확한 텍스트 선택
- 26. UITableView 선택 및 선택 취소
- 27. Javascript : DOM 조작 후 선택 영역 (강조 표시된 텍스트) 반환
- 28. Highlite UIWebview의 텍스트 선택
- 29. 텍스트 선택 교차점 알고리즘
- 30. 포커스가있는 QLineEdit 텍스트 선택
mousemove 및 mouseout을 청취함으로써 컨텍스트 메뉴의 select를 처리 할 수있었습니다. 결국 실제로 "모두 선택"에 대해 수행 할 수있는 무언가가 있습니다. – sboisse
@sboisse : 아마도'mousemove' 이벤트가 발생할 때마다 선택을 확인해야할까요? 그것은 저에게 폴링과 거의 같은 것처럼 보입니다. –
폴링 중이지만 타이머를 사용하지 않고 작동하도록하는 방법을 찾고 있었기 때문에 브라우저에서 처리가 덜 낭비되었습니다. – sboisse