텍스트 상자에 포커스가있을 때 텍스트 상자의 모든 내용을 선택하는 Vanilla JS 또는 jQuery 솔루션은 무엇입니까?
텍스트 상자에 포커스가있을 때 텍스트 상자의 모든 내용을 선택하는 Vanilla JS 또는 jQuery 솔루션은 무엇입니까?
답변:
$(document).ready(function() {
$("input:text").focus(function() { $(this).select(); } );
});
<input type="text" onfocus="this.select();" onmouseup="return false;" value="test" />
onmouseup="return false;"
사용자가 텍스트를 자유롭게 선택하고 편집 할 수있게하려면 추가 하지 마십시오 . 이 코드를 사용하면 텍스트가 "모두 선택"상황에 잠기고 사용자가 새 텍스트를 입력하거나 화살표 키를 사용하여 이동하지 않으면 텍스트를 편집 할 수 없습니다. 솔직히 이것은 매우 이상한 행동처럼 느껴지므로 텍스트 상자를 영구적으로 편집 할 수 없으며 따라서 비활성화하지 않는 한 의미가 없습니다.
onmouseup="return false;"
사용자가 처음 클릭하거나 탭할 때 선택을 원한다면 필요하지 않습니다 . 그리고 바닐라 자바 스크립트의 경우 +1!
$(document).ready(function() {
$("input[type=text]").focus().select();
});
$(document).ready(function() {
$("input:text")
.focus(function () { $(this).select(); } )
.mouseup(function (e) {e.preventDefault(); });
});
mouseup
이벤트 기본값을 방지하는 한 가지 단점을 제공합니다 . "커서가 필드에 있으면 선택한 텍스트 내에서 아무 곳이나 클릭하면 커서가 작동하지 않습니다. 클릭이 효과적으로 비활성화됩니다. 초점을 맞추고 전체 텍스트를 선택하는 것이 바람직한 상황은 아마도 두 가지 사악한 것보다 적을 것입니다. "
jQuery는 경우에 따라 사용하기 쉬운 JavaScript가 아닙니다.
이 예를보십시오 :
<textarea rows="10" cols="50" onclick="this.focus();this.select()">Text is here</textarea>
이것은 Chrome / Safari 문제가 아니며 Firefox 18.0.1과 매우 유사한 동작을 경험했습니다. 재미있는 부분은 이것이 MSIE에서 발생하지 않는다는 것입니다! 여기서 문제 는 입력 내용을 강제로 선택 해제 하는 첫 번째 mouseup 이벤트이므로 첫 번째 발생은 무시하십시오.
$(':text').focus(function(){
$(this).one('mouseup', function(event){
event.preventDefault();
}).select();
});
timeOut 접근 방식은 이상한 동작을 유발하며 모든 mouseup 이벤트를 차단하면 입력 요소를 다시 클릭하여 선택 항목을 제거 할 수 없습니다.
HTML :
Enter Your Text : <input type="text" id="text-filed" value="test">
JS 사용 :
var textFiled = document.getElementById("text-filed");
textFiled.addEventListener("focus", function() { this.select(); });
JQuery 사용 :
$("#text-filed").focus(function() { $(this).select(); } );
React JS 사용 :
렌더 기능 내부의 각 구성 요소에서-
<input
type="text"
value="test"
onFocus={e => e.target.select()}
/>
onFocus={(e) => e.target.select()}
이것은 iOS에서도 작동합니다.
<input type="text" onclick="this.focus(); this.setSelectionRange(0, 9999);" />
https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/select
여기에 대한 답변은 어느 시점까지 도움이되었지만 Chrome에서 위 / 아래 버튼을 클릭 할 때 HTML5 숫자 입력 필드에 문제가있었습니다.
단추 중 하나를 클릭하고 단추 위에 마우스를 놓으면 마우스가 버려 져서 마우스 단추를 누른 것처럼 숫자가 계속 변경됩니다.
아래처럼 트리거 된 즉시 mouseup 핸들러를 제거 하여이 문제를 해결했습니다.
$("input:number").focus(function () {
var $elem = $(this);
$elem.select().mouseup(function (e) {
e.preventDefault();
$elem.unbind(e.type);
});
});
이것이 미래 사람들에게 도움이되기를 바랍니다 ...
mouseup
되고 s는 아닙니다 . 따라서이 문제는 오지 않아야합니다.number
이 작동합니다, 이것을보십시오-
<input id="textField1" onfocus="this.select()" onmouseup="return false" />
Safari / IE 9 및 Chrome에서 작동하지만 Firefox에서 테스트 할 기회는 없었습니다.
몇 가지 함수 호출을 통합하여 Zach의 답변을 약간 향상시킬 수있었습니다. 이 답변의 문제점은 onMouseUp을 완전히 비활성화하여 포커스가 있으면 텍스트 상자를 클릭하지 못하게한다는 것입니다.
내 코드는 다음과 같습니다.
<input type="text" onfocus="this.select()" onMouseUp="javascript:TextBoxMouseUp();" onMouseDown="javascript:TextBoxMouseDown();" />
<script type="text/javascript">
var doMouseUp = true;
function TextBoxMouseDown() {
doMouseUp = this == document.activeElement;
return doMouseUp;
}
function TextBoxMouseUp() {
if (doMouseUp)
{ return true; }
else {
doMouseUp = true;
return false;
}
}
</script>
이것은 Zach의 대답보다 약간 개선되었습니다. IE에서 완벽하게 작동하고 Chrome에서 전혀 작동하지 않으며 FireFox에서 번갈아 성공합니다 (매년마다). 누군가 FF 또는 Chrome에서 안정적으로 작동하는 방법에 대한 아이디어가 있다면 공유하십시오.
어쨌든, 나는 이것을 조금 더 멋지게 만들 수있는 것을 나눌 것이라고 생각했습니다.
onMouseUp=""
와 onMouseDown=""
올바른 W3 표준이 아니다. 그들은해야 onmouseup=""
하고 onmousedown=""
. 다른 html 속성과 마찬가지로 낙타가 아닌 소문자로 작성해야합니다.
@Travis 및 @Mari와 마찬가지로 사용자가 클릭했을 때 자동 선택을 원했습니다. 이는 mouseup
이벤트 의 기본 동작을 방지하지만 사용자가 클릭하지 못하게하는 것을 의미합니다. IE11, Chrome 45, Opera 32 및 Firefox 29 (현재 설치된 브라우저)에서 작동하는 솔루션은 마우스 클릭과 관련된 일련의 이벤트를 기반으로합니다.
초점이없는 텍스트 입력을 클릭하면 다음과 같은 이벤트가 나타납니다.
mousedown
: 클릭에 대한 응답으로. focus
필요한 경우 기본 처리가 발생하고 선택 시작이 설정됩니다.focus
:의 기본 처리의 일부로 mousedown
.mouseup
: 클릭이 완료되면 기본 처리에서 선택 종료가 설정됩니다.이미 포커스가있는 텍스트 입력을 클릭하면 focus
이벤트를 건너 뜁니다. @Travis와 @Mari가 모두 알 수 있듯이 기본 이벤트 처리 mouseup
는 focus
이벤트가 발생하는 경우에만 방지해야 합니다. 그러나 " focus
발생하지 않음"이벤트가 없으므로 mousedown
처리기 내에서 수행 할 수있는이를 추론해야 합니다.
@Mari의 솔루션을 사용하려면 jQuery를 가져와야하므로 피하고 싶습니다. @Travis의 솔루션은를 검사하여이를 수행 document.activeElement
합니다. 나는 그의 해결책은 브라우저에서 작동하지 않는 이유는 정확히 모르겠지만, 텍스트 입력 포커스가 있는지 여부를 추적 할 수있는 또 다른 방법이있다 : 단순히 따라가 focus
와blur
이벤트를.
나를 위해 작동하는 코드는 다음과 같습니다.
var blockMouseUp = false;
var customerInputFocused = false;
txtCustomer.onfocus =
function ()
{
try
{
txtCustomer.selectionStart = 0;
txtCustomer.selectionEnd = txtCustomer.value.length;
}
catch (error)
{
txtCustomer.select();
}
customerInputFocused = true;
};
txtCustomer.onblur =
function ()
{
customerInputFocused = false;
};
txtCustomer.onmousedown =
function ()
{
blockMouseUp = !customerInputFocused;
};
txtCustomer.onmouseup =
function ()
{
if (blockMouseUp)
return false;
};
나는 이것이 누군가에게 도움이되기를 바랍니다. :-)
$('input').focus(function () {
var self = $(this);
setTimeout(function () {
self.select();
}, 1);
});
편집 : @DavidG의 요청에 따라 왜 이것이 효과가 있는지 잘 모르겠 기 때문에 세부 정보를 제공 할 수는 없지만 포커스 이벤트가 위 또는 아래로 전파되거나 포커스가 발생하는 것과 관련이 있고 입력 요소가 알림을받는 것과 관련이 있다고 생각합니다. 초점을 받았습니다. 시간 초과를 설정하면 요소가 완료되었음을 알 수 있습니다.
참고 : ASP.NET에서 프로그래밍하는 경우 C #에서 ScriptManager.RegisterStartupScript를 사용하여 스크립트를 실행할 수 있습니다.
ScriptManager.RegisterStartupScript(txtField, txtField.GetType(), txtField.AccessKey, "$('#MainContent_txtField').focus(function() { $(this).select(); });", true );
또는 다른 답변에서 제안 된 HTML 페이지에 스크립트를 입력하십시오.
나는 파티에 늦었지만 IE11, Chrome, Firefox에서 마우스 업을 방해하지 않고 JQuery없이 완벽하게 작동합니다.
inputElement.addEventListener("focus", function (e) {
var target = e.currentTarget;
if (target) {
target.select();
target.addEventListener("mouseup", function _tempoMouseUp(event) {
event.preventDefault();
target.removeEventListener("mouseup", _tempoMouseUp);
});
}
});
focus
필드에 태핑하면 여러 개의 마우스 업 이벤트 리스너가 연결됩니다.
내 해결책은 다음입니다.
var mouseUp;
$(document).ready(function() {
$(inputSelector).focus(function() {
this.select();
})
.mousedown(function () {
if ($(this).is(":focus")) {
mouseUp = true;
}
else {
mouseUp = false;
}
})
.mouseup(function () {
return mouseUp;
});
});
따라서 mouseup은 정상적으로 작동하지만 입력으로 초점을 얻은 후에 선택을 해제하지 않습니다.