포커스를 받으면 텍스트 상자의 모든 내용을 선택하십시오 (Vanilla JS 또는 jQuery)


310

텍스트 상자에 포커스가있을 때 텍스트 상자의 모든 내용을 선택하는 Vanilla JS 또는 jQuery 솔루션은 무엇입니까?



3
@gdoron은 어떤 이유로 링크 가이 질문 자체로 리디렉션됩니다.
Destrictor


이러한 솔루션의 대부분의 문제점은 입력 필드 내에서 커서 위치를 변경할 때 올바르게 작동하지 않는다는 것입니다. 내 대답을 여기에서보십시오 : stackoverflow.com/a/20826207/641452
Colin Breame

답변:


369
$(document).ready(function() {
    $("input:text").focus(function() { $(this).select(); } );
});

23
또한 추가 정보 : "input [type = text]"는 이제 "input : text"로 간주 될 수 있습니다
Ricardo Vega

8
이것은 Chrome에서 작동하지 않는 것으로 보이며 jQuery 웹 사이트는 브라우저에 따라 다릅니다. 다른 사람이 확인할 수 있습니까?
Kenny Wyland

71
마우스 업 이벤트로 인해 WebKit 브라우저가이를 방해하는 것처럼 보입니다. 나는 이것을 추가하고 효과가 있었다 : $ ( 'input : text'). mouseup (function (e) {return false;});
Kenny Wyland

5
Kenny는 정확하지만 불행히도 'mouseup'은 Chrome 스피너 컨트롤에도 영향을 미칩니다. 오히려 '초점'보다 '클릭'오프 트리거하면 해당를 해결하는 것
리처드 켄 나드

24
다음과 같이 사용합니다 : $ ( "input : text"). select (). focus ();
Phuong

227

<input type="text" onfocus="this.select();" onmouseup="return false;" value="test" />


43
클릭에 정지 취소하려면 + onMouseUp에 = "반환 거짓"
앤서니 존스턴

2
mouseup에 대한 일종의 stopEvent의 경우 +1이거나 안정적으로 작동하지 않습니다. 이를 수행하는 단점은 커서가 필드에 있으면 선택한 텍스트 내의 아무 곳이나 클릭하여 커서를 배치 할 수 없다는 것입니다. 클릭이 효과적으로 사용 중지되었습니다. 여전히 초점을 맞추고 전체 텍스트를 선택하는 것이 바람직한 상황에서는 아마도 두 가지 악한 것 중 적은 것입니다.
enigment

onMouseDown 이벤트 중에 this! = document.activeElement 인 경우 전역 변수 doMouseUp을 false로 설정하여 enigment로 인해 발생하는 문제를 다소 해결할 수있었습니다. 그런 다음 onMouseUp 중에 doMouseUp을 true로 재설정하고 재설정하기 전에 doMouseUp 값을 리턴하십시오. 이것은 복잡해지고 코드가 필요합니다. 더 잘 설명하는 답변을 게시하겠습니다.
트래비스

1
텍스트 상자 안에 초점을 맞춘 onmouseup="return false;" 사용자가 텍스트를 자유롭게 선택하고 편집 할 수있게하려면 추가 하지 마십시오 . 이 코드를 사용하면 텍스트가 "모두 선택"상황에 잠기고 사용자가 새 텍스트를 입력하거나 화살표 키를 사용하여 이동하지 않으면 텍스트를 편집 할 수 없습니다. 솔직히 이것은 매우 이상한 행동처럼 느껴지므로 텍스트 상자를 영구적으로 편집 할 수 없으며 따라서 비활성화하지 않는 한 의미가 없습니다.
ADTC

1
기술적으로, onmouseup="return false;"사용자가 처음 클릭하거나 탭할 때 선택을 원한다면 필요하지 않습니다 . 그리고 바닐라 자바 ​​스크립트의 경우 +1!
clabe45

42
$(document).ready(function() {
  $("input[type=text]").focus().select();
});

3
확인했습니다. 현재 가장 높은 투표 수 / 답변이 Chrome에서 작동하지 않는 것 같습니다.
Aron Boyette

39
$(document).ready(function() {
    $("input:text")
        .focus(function () { $(this).select(); } )
        .mouseup(function (e) {e.preventDefault(); });
});

1
이거 좋다 감사! Zach의 답변에 대한 주석에 의한 주석은 mouseup이벤트 기본값을 방지하는 한 가지 단점을 제공합니다 . "커서가 필드에 있으면 선택한 텍스트 내에서 아무 곳이나 클릭하면 커서가 작동하지 않습니다. 클릭이 효과적으로 비활성화됩니다. 초점을 맞추고 전체 텍스트를 선택하는 것이 바람직한 상황은 아마도 두 가지 사악한 것보다 적을 것입니다. "
JohnK

25

jQuery는 경우에 따라 사용하기 쉬운 JavaScript가 아닙니다.

이 예를보십시오 :

<textarea rows="10" cols="50" onclick="this.focus();this.select()">Text is here</textarea>

출처 : CSS 트릭 , MDN


7
마크 업과 코드가 모두 혼동되지 않는다면 괜찮습니다. 대부분의 사람들은 요즘 자신의 대본을 '불법'으로 유지하려고합니다. 아 ... 그리고 jQuery 자바 스크립트입니다.
앤드류 이발소

2
onclick의 제안에 감사드립니다. 모든 사람이 jQuery를 사용하여 다른 옵션을 보게되어 기쁘지는 않습니다.
Lukus

이것은 사용자가 마우스 만 사용한다고 가정합니다
pcnate

키보드에 onfocus = "this.focus (); this.select ()"를 사용할 수 있습니다
Muhammad Nadeem

21

이것은 Chrome / Safari 문제가 아니며 Firefox 18.0.1과 매우 유사한 동작을 경험했습니다. 재미있는 부분은 이것이 MSIE에서 발생하지 않는다는 것입니다! 여기서 문제 는 입력 내용을 강제로 선택 해제 하는 첫 번째 mouseup 이벤트이므로 첫 번째 발생은 무시하십시오.

$(':text').focus(function(){
    $(this).one('mouseup', function(event){
        event.preventDefault();
    }).select();
});

timeOut 접근 방식은 이상한 동작을 유발하며 모든 mouseup 이벤트를 차단하면 입력 요소를 다시 클릭하여 선택 항목을 제거 할 수 없습니다.


1
단일 마우스 업을 방지하기 위해 1을 사용하는 경우 +1 처음 클릭 한 후 마우스로 텍스트를 선택할 수 없다는 것을 정말로 싫어했습니다.
Pluc

13

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()}
/>

2
이것은 React에서 저에게 효과적입니다.onFocus={(e) => e.target.select()}
Paito

11

내 해결책은 시간 초과를 사용하는 것입니다. 작동하는 것 같습니다

$('input[type=text]').focus(function() {
    var _this = this;
    setTimeout(function() {
        _this.select();
    }, 10);
});

이것이 내가 사용하고 선호하는 솔루션입니다. 시간 초과 값 0을 사용하면 현재 이벤트 큐의 끝에 추가되므로 "mouseup"이벤트 후에 실행됩니다.
DavidM


4

인라인 코드가 나쁜 스타일이라는 것을 알고 있지만 이것을 .js 파일에 넣고 싶지 않았습니다. jQuery없이 작동합니다!

<input type="text" value="blah blah" onfocus="this.select(); this.selAll=1;" onmouseup="if(this.selAll==0) return true; this.selAll=0; return false;"></input>

3

여기에 대한 답변은 어느 시점까지 도움이되었지만 Chrome에서 위 / 아래 버튼을 클릭 할 때 HTML5 숫자 입력 필드에 문제가있었습니다.

단추 중 하나를 클릭하고 단추 위에 마우스를 놓으면 마우스가 버려 져서 마우스 단추를 누른 것처럼 숫자가 계속 변경됩니다.

아래처럼 트리거 된 즉시 mouseup 핸들러를 제거 하여이 문제를 해결했습니다.

    $("input:number").focus(function () {
        var $elem = $(this);
        $elem.select().mouseup(function (e) {
            e.preventDefault();
            $elem.unbind(e.type);
        });
    });

이것이 미래 사람들에게 도움이되기를 바랍니다 ...


아뇨. u 자체 생성 문제에 대한 해결책을 제시하고 있습니다. 답변을 올바르게 보면 텍스트 입력 필드에만 바인딩 mouseup되고 s는 아닙니다 . 따라서이 문제는 오지 않아야합니다.number
Om Shankar

마우스 업 바인딩의 문제점은 필드 내에서 커서를 이동할 때 방해한다는 것입니다. 이것은 더 나은 솔루션이지만 필드를 탭하면 다음 마우스 다운이 손실됩니다 (마우스로 커서를 이동할 수 없음). 그것은 모든 마우스 다운을 잃는 것보다 낫습니다!
Colin Breame

3

이 작동합니다, 이것을보십시오-

<input id="textField1" onfocus="this.select()" onmouseup="return false" /> 

Safari / IE 9 및 Chrome에서 작동하지만 Firefox에서 테스트 할 기회는 없었습니다.


3

나는 여기에 이미 많은 답변이 있다는 것을 알고 있습니다. 그러나 이것은 지금까지 누락되었습니다. 아약스 생성 콘텐츠와 함께 작동하는 솔루션 :

$(function (){
    $(document).on("focus", "input:text", function() { 
        $(this).select(); 
    });
});

2

몇 가지 함수 호출을 통합하여 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에서 안정적으로 작동하는 방법에 대한 아이디어가 있다면 공유하십시오.

어쨌든, 나는 이것을 조금 더 멋지게 만들 수있는 것을 나눌 것이라고 생각했습니다.


코드에 오류가 있습니다. 두 번째 방법은 "TextBoxMouseUp"이라고합니다. 비슷한 접근법을 사용하는 내 대답을 살펴보십시오.
Colin Breame

1
그것은 주목해야한다 onMouseUp=""onMouseDown=""올바른 W3 표준이 아니다. 그들은해야 onmouseup=""하고 onmousedown="". 다른 html 속성과 마찬가지로 낙타가 아닌 소문자로 작성해야합니다.
DrewT

2

@Travis 및 @Mari와 마찬가지로 사용자가 클릭했을 때 자동 선택을 원했습니다. 이는 mouseup이벤트 의 기본 동작을 방지하지만 사용자가 클릭하지 못하게하는 것을 의미합니다. IE11, Chrome 45, Opera 32 및 Firefox 29 (현재 설치된 브라우저)에서 작동하는 솔루션은 마우스 클릭과 관련된 일련의 이벤트를 기반으로합니다.

초점이없는 텍스트 입력을 클릭하면 다음과 같은 이벤트가 나타납니다.

  • mousedown: 클릭에 대한 응답으로. focus필요한 경우 기본 처리가 발생하고 선택 시작이 설정됩니다.
  • focus:의 기본 처리의 일부로 mousedown.
  • mouseup: 클릭이 완료되면 기본 처리에서 선택 종료가 설정됩니다.

이미 포커스가있는 텍스트 입력을 클릭하면 focus이벤트를 건너 뜁니다. @Travis와 @Mari가 모두 알 수 있듯이 기본 이벤트 처리 mouseupfocus이벤트가 발생하는 경우에만 방지해야 합니다. 그러나 " focus발생하지 않음"이벤트가 없으므로 mousedown처리기 내에서 수행 할 수있는이를 추론해야 합니다.

@Mari의 솔루션을 사용하려면 jQuery를 가져와야하므로 피하고 싶습니다. @Travis의 솔루션은를 검사하여이를 수행 document.activeElement합니다. 나는 그의 해결책은 브라우저에서 작동하지 않는 이유는 정확히 모르겠지만, 텍스트 입력 포커스가 있는지 여부를 추적 할 수있는 또 다른 방법이있다 : 단순히 따라가 focusblur 이벤트를.

나를 위해 작동하는 코드는 다음과 같습니다.

    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;
      };

나는 이것이 누군가에게 도움이되기를 바랍니다. :-)


+1 고맙지 만 'txtCustomer'컨트롤을 스크립트에 하드 코딩하지 않도록 어떻게 다시 작성할 수 있습니까? 'this'객체를 전달하는 방법이 있습니까?
Fandango68

한 가지 방법은 매개 변수로 전달 된 모든 요소에 동작을 적용하는 유틸리티 함수를 작성하는 것입니다. 이 함수 내에서 요소 참조는 매개 변수에 하드 코딩됩니다. 그런 다음 원하는 수의 수단으로 식별되는 여러 입력 요소에서 호출 할 수 있습니다. :-)
Jonathan Gilbert

죄송합니다. 예를 들어 답을 업데이트 해 주시겠습니까? 감사합니다
Fandango68

1
"txtCustomer"라는 매개 변수를 사용하는 함수 선언으로 작성한 코드를 래핑하십시오. "txtCustomer"의 이름을 다른 것으로 바꾸는 것이 좋지만, 확신이 없으면 기술적으로 "txtCustomer"라는 변수와 함께 작동합니다. 즉, function MakeTextBoxAutoSelect (txtCustomer) { 위에서 쓴 내용 }
Jonathan Gilbert


1

텍스트 상자에 포커스가 있을 때 텍스트 상자의 모든 내용을 선택 하는 JavaScript 또는 jQuery 솔루션은 무엇입니까 ?

다음 속성 만 추가하면됩니다.

onfocus="this.select()"

예를 들면 다음과 같습니다.

<input type="text" value="sometext" onfocus="this.select()">

(정직하게도 왜 다른 것이 필요한지 전혀 모르겠습니다.)



0
$('input').focus(function () {
    var self = $(this);
    setTimeout(function () {
        self.select();
    }, 1);        
});

편집 : @DavidG의 요청에 따라 왜 이것이 효과가 있는지 잘 모르겠 기 때문에 세부 정보를 제공 할 수는 없지만 포커스 이벤트가 위 또는 아래로 전파되거나 포커스가 발생하는 것과 관련이 있고 입력 요소가 알림을받는 것과 관련이 있다고 생각합니다. 초점을 받았습니다. 시간 초과를 설정하면 요소가 완료되었음을 알 수 있습니다.


일부 코드를 붙여 넣기보다는 답변을 설명하십시오.
DavidG

0

이벤트를 함께 연결하면 사용할 필요가 없다고 생각합니다. .one 이 스레드의 다른 곳에서 제안한대로 .

예:

$('input.your_element').focus( function () {
    $(this).select().mouseup( function (e) {
        e.preventDefault();
    });
});

0

참고 : ASP.NET에서 프로그래밍하는 경우 C #에서 ScriptManager.RegisterStartupScript를 사용하여 스크립트를 실행할 수 있습니다.

ScriptManager.RegisterStartupScript(txtField, txtField.GetType(), txtField.AccessKey, "$('#MainContent_txtField').focus(function() { $(this).select(); });", true );

또는 다른 답변에서 제안 된 HTML 페이지에 스크립트를 입력하십시오.


이 질문에는 ASP.NET이 없습니다. : |
Mohamed Thaufeeq

사실, 프로그래머가 ASP.NET을 사용하는 경우를 대비하여 이것을 게시했습니다. 프레임 워크를 사용하여 답변을 찾는 사람에게 도움이 될 수 있습니다 (이것이 도움이되었습니다). 나는 단지 공유하고 있으며 누군가가 도움이되기를 바랍니다.
Exel Gamboa

프로그래머가 ASP.NET을 사용하는 경우 질문에 'asp.net'태그를 추가합니다. : |
Mohamed Thaufeeq

0

나는이 곳을 뿌려 완벽하게 작동합니다!

            $('input').on('focus', function (e) {
                $(this)
                $(element).one('mouseup', function () {
                        $(this).select();
                        return false;
                    })                        .select();
            });

0

나는 파티에 늦었지만 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필드에 태핑하면 여러 개의 마우스 업 이벤트 리스너가 연결됩니다.
Sebastian Scholle

-1

내 해결책은 다음입니다.

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은 정상적으로 작동하지만 입력으로 초점을 얻은 후에 선택을 해제하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.