Tab텍스트 상자 내의 키 를 사용하여 네 개의 공백을 탭할 수 있기를 원합니다 . 지금처럼 Tab 키는 커서를 다음 입력으로 이동합니다.
UI로 버블 링되기 전에 텍스트 상자의 Tab 키를 캡처하는 JavaScript가 있습니까?
일부 브라우저 (예 : FireFox)에서이를 허용하지 않을 수 있음을 이해합니다. Shift+ Tab또는 Ctrl+ 와 같은 사용자 지정 키 조합은 Q어떻습니까?
답변
keydown
/ keyup
이벤트 를 캡처하더라도 탭 키가 실행하는 유일한 이벤트이지만 탭 순서에서 다음 항목으로 이동하는 기본 동작이 발생하지 않도록 방지하는 방법이 여전히 필요합니다.
Firefox에서는 preventDefault()
이벤트 핸들러에 전달 된 이벤트 객체에 대한 메서드를 호출 할 수 있습니다 . IE에서는 이벤트 핸들에서 false를 반환해야합니다. JQuery 라이브러리는 preventDefault
IE 및 FF에서 작동하는 이벤트 객체에 대한 메서드를 제공합니다 .
<body>
<input type="text" id="myInput">
<script type="text/javascript">
var myInput = document.getElementById("myInput");
if(myInput.addEventListener ) {
myInput.addEventListener('keydown',this.keyHandler,false);
} else if(myInput.attachEvent ) {
myInput.attachEvent('onkeydown',this.keyHandler); /* damn IE hack */
}
function keyHandler(e) {
var TABKEY = 9;
if(e.keyCode == TABKEY) {
this.value += " ";
if(e.preventDefault) {
e.preventDefault();
}
return false;
}
}
</script>
</body>
답변
양식 항목간에 탭을 분리하는 것보다 탭 들여 쓰기가 작동하지 않는 것이 좋습니다.
마크 다운 상자에 코드를 삽입하기 위해 들여 쓰기를하려면 Ctrl+ K(또는 Mac에서는 ⌘K)를 사용하세요.
실제로 액션을 중지하는 측면에서 jQuery (Stack Overflow가 사용하는)는 이벤트 콜백에서 false를 반환 할 때 이벤트 버블 링을 중지합니다. 이렇게하면 여러 브라우저에서 작업하는 것이 더 쉬워집니다.
답변
이전 답변은 괜찮지 만 나는 행동과 프리젠 테이션을 혼합하는 것에 단호하게 반대하는 사람들 중 하나이기 때문에 (내 HTML에 JavaScript를 넣음) JavaScript 파일에 이벤트 처리 논리를 넣는 것을 선호합니다. 또한 모든 브라우저가 동일한 방식으로 이벤트 (또는 e)를 구현하는 것은 아닙니다. 논리를 실행하기 전에 확인을 수행 할 수 있습니다.
document.onkeydown = TabExample;
function TabExample(evt) {
var evt = (evt) ? evt : ((event) ? event : null);
var tabKey = 9;
if(evt.keyCode == tabKey) {
// do work
}
}
답변
키의 기본 동작을 변경하지 않는 것이 좋습니다. 나는 마우스를 건드리지 않고 가능한 한 많이하기 때문에 탭 키를 폼의 다음 필드로 이동하지 않도록하면 매우 가중 될 것입니다.
그러나 단축키는 특히 큰 코드 블록과 중첩에 유용 할 수 있습니다. Shift-TAB은 일반적으로 양식의 이전 필드로 이동하기 때문에 잘못된 옵션입니다. WMD 편집기에서 단축키를 사용하여 코드 탭을 삽입하는 새로운 버튼이 가능할까요?
답변
ScottKoon의 베스트 답변에 문제가 있습니다.
여기있어
} else if(el.attachEvent ) {
myInput.attachEvent('onkeydown',this.keyHandler); /* damn IE hack */
}
해야한다
} else if(myInput.attachEvent ) {
myInput.attachEvent('onkeydown',this.keyHandler); /* damn IE hack */
}
이로 인해 IE에서는 작동하지 않았습니다. ScottKoon이 코드를 업데이트하기를 바랍니다.
답변
Mac의 Chrome에서 alt-tab은 탭 문자를 <textarea>
필드에 삽입 합니다.
하나 :. 쉬!