iOS 장치 (모바일 Safari)의 입력 필드에서 프로그래밍 방식으로 텍스트 선택


88

iOS 장치 (예 : iPhone, 모바일 Safari를 실행하는 iPad)에서 입력 필드의 텍스트를 프로그래밍 방식으로 어떻게 선택합니까?

일반적으로 요소 에서 .select()함수 를 호출하는 것으로 충분 <input ... />하지만 이러한 장치에서는 작동하지 않습니다. 커서는 선택하지 않고 기존 항목의 끝에 남게됩니다.


10
터치 장치가 텍스트 사전 선택의 관련성을 변경하는 이유를 모르겠습니다. 터치 장치에 대해 말한 내용은 비 터치 장치에 대해서도 똑같이 말할 수 있습니다. 사용자가 항목을 터치하여 편집 할 때 텍스트를 미리 선택하고 싶습니다. 대부분의 경우 사용자는 더 이상 터치하고 드래그하지 않고도 기존 콘텐츠를 교체 할 수 있습니다. 다른 경우에는 기존 콘텐츠를 편집하려는 경우 선택을 취소하거나 선택을 변경할 수 있습니다.
sroebuck

2
불행히도 .focus (). select ()는 작동하지 않습니다.
sroebuck

2
이 문제에 대한 현상금을 시작합니다. 내 목표는 사용자가 내 텍스트 영역을 매우 쉽게 클릭하고 "복사"를 탭하여 텍스트를 클립 보드에 복사하는 것입니다.
Dan Fabulich

여기서도 마찬가지입니다. Mobile Safari에서 작동하지 않는 방법이 많이있는 것 같습니다. .select () 및 .focus ()가 그 중 두 가지입니다.

@sroebuck David W. Keith에 대한 좋은 대답! 엄지 손가락!
eyurdakul

답변:


95
input.setSelectionRange(0, 9999);

https://developer.mozilla.org/en/DOM/Input.select


3
이것은 나를 위해 일했지만 동일한 입력에서 mouseup을 중지해야했습니다.
DuStorm

8
이는 아이 패드 나 아이폰 중 하나에 나를 위해 작동하지 않았다
더그

4
이것은 .focus()호출하기 전에 입력을 트리거 한 경우에만 저에게 효과적 input.setSelectionRange이었습니다. focus입력 에서 이벤트를 수신 하는 경우 무한 루프를 고려해야합니다.
allieferr 2014 년

10
언급 할 가치가있는 문제 : readonly속성이 설정된 경우 텍스트 영역에서는 작동하지 않습니다 .
JayPea 2014-06-23

5
나는 다양한 해결책을 가지고 노는 데 한 시간 이상을 보냈다. 핸들러 호출 setSelectionRange()은 프로그래밍 방식으로 focus트리거 할 때 작동 .focus()하지만 iOS에서 텍스트 입력을 수동으로 탭하면 선택이 발생하지 않습니다. 간단히 말하면 setSelectionRange()setTimeout 0 내에서 호출 하기 만하면됩니다. 포커스를 트리거하는 항목에 관계없이 예상대로 작동합니다.

30

이 스레드의 어떤 것도 나를 위해 일하지 않았습니다. 다음은 내 iPad에서 작동하는 것입니다.

// t is the input field
setTimeout(function() {
    t.setSelectionRange(0, 9999);
}, 1);

이것은 f ** kin 트릭을한다! 감사합니다! '클릭'이벤트와 함께 작동
saike

감사합니다 !!
Vaclav Kusak

26

부정적인 것을 증명하기는 어렵지만 제 연구에 따르면 이것이 모바일 사파리의 버그라고합니다.

focus ()는 어느 정도 작동합니다. 성공하려면 두 번 이상의 탭이 필요할 수 있으며 탭 자체가 필드를 제공하므로 해당 필드에 대한 사용자 탭에 응답하려는 경우에는 필요하지 않습니다. 초점. 불행히도 select () 단순히 Mobile Safari에서 작동하지 않습니다.

가장 좋은 방법은 Apple 의 버그 보고서 일 수 있습니다 .


1
우리의 테스트는 동일합니다. 모바일 사파리에서 버그 / 누락 된 기능입니다.
Nir Levy

2
FWIW는 WebKit을 기반으로하는 Chrome 데스크톱 및 Android 브라우저에서 작동합니다.
jrummell

24

이 바이올린을보십시오 : (입력 상자에 텍스트를 입력하고 '텍스트 선택'을 클릭하십시오)

내 iPod (5 세대 iOS6.0.1)의 입력 상자에서 텍스트를 선택하고 키보드를 열고 잘라 내기 / 복사 / 제안 ... 메뉴도 표시합니다.

일반 자바 스크립트 사용. jQuery로 이것을 시도하지 않았습니다.

document.getElementById("p1").selectionStart = 0
document.getElementById("p1").selectionEnd = 999

숫자 999는 샘플 일뿐입니다. 이 숫자를 선택하려는 문자 수로 설정해야합니다.

최신 정보:

  • iPod5-iOS6.0.1-정상적으로 작동합니다.
  • iPad1-iOS5.1.1-텍스트 만 선택되었습니다. 선택 항목을 한 번 탭하여 잘라 내기 / 복사 메뉴를 엽니 다.
  • iPad2-iOS4.3.3-텍스트 만 선택되었습니다. 선택 항목을 한 번 탭하여 잘라 내기 / 복사 메뉴를 엽니 다.

마지막 2 개의 경우 input요소 에서 클릭 이벤트를 트리거하여 실험 할 수 있습니다.

업데이트 : (2013 년 7 월 10 일)

  • iPod5-iOS7.0.2-링크에서 바이올린 사용 : 입력 상자에 입력 된 텍스트를 볼 수 없습니다. 선택을 누르면 facebook.com (??? wtf ???)으로 리디렉션됩니다.

업데이트 : (2013 년 11 월 14 일)

  • 아이폰 OS 7.0.3 :에서 주석 덕분에 binki 해당 업데이트 .selectionStart.selectionEnd 수행 작업을.

업데이트 : (2015 년 1 월 15 일)

  • iOS 8.xx : Michael Siebert 의 의견에 감사드립니다 . 댓글에서 발췌 : 포커스와 클릭 이벤트를 모두 수신 한 다음 setTimeout / _. debounce를 사용하여 두 경우 모두에서 작동하도록해야했습니다. 입력을 클릭하거나 탭을 통해 포커스를

당신은 오늘의 나의 영웅입니다! 매력처럼 작동합니다! ;-)
andi1984

3
@ andi1984 영웅 배지는 어디서받을 수 있나요?
bart s

1
다른 iOS 버전과의 호환성에 대해 알고 있습니까? iOS5 및 iOS4에서 작동합니까?
andi1984

1
텍스트 입력을 사용할 수 :( 내 사용 사례 때 iOS6의에 나를 위해 작동하지만 a)는 데스크탑 크롬 B의 작업을하지 않는)을하지 작업을 수행 : 나는 고유 한 URL을 생성하고 원활히하기 공유를 할 수 있습니다.
화성 로버트슨

1
@barts jsfiddle의 "공유"메뉴가 엉망이고 탭할 수 있어야하는데 아마도 보이지는 않지만 페이스 북에서 끝났다고 생각합니다. iPad에서 iOS-7.0.3으로 테스트 할 때 보이지 않는 Twitter 버튼을 직접 클릭했습니다. 나는 또한 내가 당신 <input/>의을 탭하고 있다고 생각했을 때 , 아이 패드는 내가 jsfiddle의“CSS”창 (내가 입력 한 모든 것이 보이지 않는 곳)에서 탭하고 있다고 생각했다. 탭이 올바른 위치로 이동하면 <input/>iOS-7.0.3에서 "텍스트 선택"버튼이 완벽하게 작동합니다. :-).
binki 2013

7

죄송합니다. 이전 게시물에서 Javascript로 답변을 원한다는 것을 암시하는 Javascript를 알지 못했습니다.

원하는 것을 얻으려면 있는 UIWebView자바 스크립트 , 나는 일에 그것을 얻을 함께 정보의 두 가지 중요한 부분을 긁어 냈다. 모바일 브라우저에 대해 잘 모르겠습니다.

  1. element.setSelectionRange(0,9999); 우리가 원하는 것을한다

  2. mouseUp 이벤트가 선택을 취소합니다.

따라서 (Prototype 사용) :

    input.observe ( 'focus', function () {
      this.setSelectionRange (0, 9999);
    });
    input.observe ( 'mouseup', function (event) {
      event.stop ();
    });

트릭을 수행합니다.

매트


3
동일한 문제가 발생하여 솔루션이 작동하는 것으로 나타 났지만 jquery (실제로 모바일)를 사용하고 있습니다. / * 채우기 안의 텍스트 선택 * / $ ( "input"). focus (function () {this.setSelectionRange (0, 9999); return false;}) .mouseup (function () {return false;} );
DuStorm

1
저는 iPad 및 iPhone에서 iOS 8을 사용하고 있으며 @DuStorm의 코드 (이 항목 위에 주석)가 여기에 제공된 모든 답변 중에서 저에게 도움이 된 유일한 것입니다. 다시 말하면 다음은 Chrome 및 Safari의 iOS 8에서 최소한 작동합니다. $("input").focus(function () { this.setSelectionRange(0, 9999); return false; } ).mouseup( function () { return false; });
Aaron Jessen 2014

내가 사용했다 focusin, 아이폰 OS 7 일이 대신 초점의
루카스

3

포커스가 작동하는 것처럼 보이지만 네이티브 이벤트에서 직접 호출 할 때만 가능합니다. SetTimeout과 같은 것을 사용하여 포커스를 호출하면 키보드를 호출하지 않습니다. iOS 키보드 제어가 매우 나쁩니다. 좋은 상황이 아닙니다.


1

Android 2.2와 함께 제공되는 Webkit에서 다음과 같은 것이 저에게 효과적입니다.

function trySelect(el) {
    setTimeout(function() {
        try {
            el.select();
        } catch (e) {
        }
    }, 0);
}

Chromium 문제 32865를 참조 하세요 .


1

iPad의 iOS 7을 사용하여이 작업을 수행 할 수 있었던 유일한 방법 <textarea></textarea><input> 필드 입니다.

<textarea onclick="this.setSelectionRange(0, 9999);">My text will be selected when textarea is clicked.</textarea>

텍스트 영역을 읽기 전용으로 만들면 선택 트릭이 더 이상 작동하지 않기 때문에 사용자가 영역 내에서 텍스트를 변경하는 것을 방지하는 방법이 더 어려웠습니다.


1

나는이 해결책을 찾기 위해 미쳐 버렸고, 당신의 모든 응답이 나를 위해 또 다른 웜 캔을 열 도록 도왔 습니다.

클라이언트가 할 수있는 사용자를 원 클릭하고 모두 선택 , 또한 사용자 수 있도록 '탭'을 아이 패드에서 모두 선택 (외부 키보드와. 내가 아는 미친 ...)

이 문제에 대한 나의 해결책은 이벤트를 재정렬하는 것입니다. 먼저 초점을 맞춘 다음을 클릭 한 다음 시작터치 합니다.

$('#myFUBARid').on('focus click touchstart', function(e){
  $(this).get(0).setSelectionRange(0,9999);
  //$(this).css("color", "blue");
  e.preventDefault();
});

많은 분들이 저를 수없이 도와 주셨 기 때문에 이것이 누군가에게 도움이되기를 바랍니다.


-4

HTML5 호환 브라우저를 사용 placeholder="xxx"하는 경우 input태그 에서 사용할 수 있습니다 . 그게 일을해야합니다.


8
나는이 질문을 물어 있었는지 생각하지 않는다
caitriona
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.