복붙노트

[JQUERY] 모바일 사파리 : inputfield에 자바 스크립트 초점 () 메서드는 클릭으로 작동?

JQUERY

모바일 사파리 : inputfield에 자바 스크립트 초점 () 메서드는 클릭으로 작동?

해결법


  1. 1.사실, 사람들은 방법이있다. 나는 [삭제됨 LINK] (아이폰 또는 아이 패드에 그것을 시도)이를 알아 내기 위해 힘차게 싸워.

    사실, 사람들은 방법이있다. 나는 [삭제됨 LINK] (아이폰 또는 아이 패드에 그것을 시도)이를 알아 내기 위해 힘차게 싸워.

    이 텍스트 상자를 보내고 () 초점에 올 때 기본적으로 터치 스크린 장치의 Safari는 인색하다. 당신이 클릭 할 경우에도 일부 데스크탑 브라우저가 더 잘 할 (). 초점을 (). 그러나 터치 스크린 장치에서 사파리의 디자이너는 키보드가 계속 올라오고 때 초점은 다음과 같은 조건에만 표시했다 그래서, 사용자에게 성가신 실현 :

    1) 사용자는 클릭 이벤트를 실행하는 동안 어딘가에 초점 ()가 호출 된 클릭. jQuery를에 옵션 : 당신이 AJAX 호출을 수행하는 경우에, 당신은 사용되지 않는 (하지만 여전히 가능) $ 아약스 ({거짓 비동기})와 같은 기적을 수행해야합니다.

    2) 또한 - 다른 텍스트 상자가 시간에 집중하면 여전히 작동하지 않는 것) 초점 (-이 사람은 잠시 동안 바쁜 날을 지켰다. 나는 이동 버튼의 touchstart 이벤트에 텍스트 상자를 흐리게 시도 있도록 AJAX를했던 "이동"버튼을했지만, 단지 키보드를 만들어 사라지고 나는 이동에 클릭을 완료 할 수있는 기회를 가지기 전에 뷰포트를 이동하는 것이 단추. 마지막으로 나는 이동 버튼의 touchend 이벤트에 텍스트 상자를 흐리게 시도하고,이 마법처럼 일했다!

    당신이 함께 # 1과 # 2를 넣을 때, 당신은 당신의 암호 필드에 초점을 배치하여, 모든 엉터리 웹 로그인 폼에서 떨어져 로그인 양식을 설정하고 그들을 더 네이티브 느끼게됩니다 마법의 결과를 얻을. 즐겨! :)


  2. 2.WunderBart의 대답의 기본 자바 스크립트 구현입니다.

    WunderBart의 대답의 기본 자바 스크립트 구현입니다.

    function onClick() {
    
      // create invisible dummy input to receive the focus first
      const fakeInput = document.createElement('input')
      fakeInput.setAttribute('type', 'text')
      fakeInput.style.position = 'absolute'
      fakeInput.style.opacity = 0
      fakeInput.style.height = 0
      fakeInput.style.fontSize = '16px' // disable auto zoom
    
      // you may need to append to another element depending on the browser's auto 
      // zoom/scroll behavior
      document.body.prepend(fakeInput)
    
      // focus so that subsequent async focus will work
      fakeInput.focus()
    
      setTimeout(() => {
    
        // now we can focus on the target input
        targetInput.focus()
    
        // cleanup
        fakeInput.remove()
        
      }, 1000)
    
    }
    

    기타 참고 : 사용 안 함 자동 줌 입력 "텍스트"태그 - 사파리 아이폰에


  3. 3.나는 최근에 같은 문제에 직면했다. 나는 분명히 모든 장치를 작동하는 솔루션을 발견했다. 프로그래밍 방식으로 비동기 초점을 할 수 있지만 다른 입력이 이미 집중 될 때 당신은 당신의 목표 입력 포커스를 전환 할 수 있습니다. 그래서 당신은 APPEND DOM에, IS 작성 숨기기 할 및 가짜 트리거 이벤트에 입력을 초점을 맞추기 위해 필요한 경우 비동기 작업 완료, 다시 대상의 입력에 바로 전화 초점을 맞 춥니 다. 다음 예제 코드 조각입니다 - 모바일에서 실행합니다.

    나는 최근에 같은 문제에 직면했다. 나는 분명히 모든 장치를 작동하는 솔루션을 발견했다. 프로그래밍 방식으로 비동기 초점을 할 수 있지만 다른 입력이 이미 집중 될 때 당신은 당신의 목표 입력 포커스를 전환 할 수 있습니다. 그래서 당신은 APPEND DOM에, IS 작성 숨기기 할 및 가짜 트리거 이벤트에 입력을 초점을 맞추기 위해 필요한 경우 비동기 작업 완료, 다시 대상의 입력에 바로 전화 초점을 맞 춥니 다. 다음 예제 코드 조각입니다 - 모바일에서 실행합니다.

    편집하다:

    여기에 동일한 코드와 바이올린입니다. 분명히 당신은 휴대폰에 부착 된 미리보기를 실행할 수 없습니다 (또는 내가 뭔가 잘못하고 있어요).

    VAR $ triggerCheckbox = $ ( "# 트리거 - 체크 박스"); VAR $ targetInput = $ ( "# 목표 입력"); 가짜 & 보이지 않는 입력을 만들기 // VAR $ fakeInput = $ ( "") .CSS ({ 위치 "절대" 폭 : $ targetInput.outerWidth (), // 제대로 확대 (아이폰 OS) 높이 : 0, // 숨기기 커서 (글꼴 크기 : 0 쿼크 수준으로 확대됩니다) (아이폰 OS)를 불투명도 0, // 투명 입력합니다] }); VAR 지연은 2000 =; // 즉 예를 들어 긴 미친 짓이야,하지만 좋은 $ triggerCheckbox.on ( "변화", 기능 (이벤트) { // 비활성화 입력 할 때 선택 취소 트리거 체크 박스 (표현 적 목적) 경우 {(!는 event.target.checked) 반환 $ targetInput .attr ( "장애인", TRUE) .attr ( "자리", "나는 불가능 해요"); } 대상 입력 컨테이너와 초점 가짜 입력에 // 앞에 추가 $ fakeInput.prependTo ( "# 용기") (초점).; // 업데이트 자리 (표현 적 목적) $ targetInput.attr ( "자리", "기다려 봐 ..."); //에서는 setTimeout, 가져 오기 또는 비동기 작업이 작동합니다 에서는 setTimeout (함수 () { 대상 입력 // 시프트 포커스 $ targetInput .attr ( "장애인", false)를 .attr ( "자리", "난 살아있어!") .초점(); // 제거 가짜 입력 - DOM에 보관 할 필요가 없습니다 fakeInput.remove ()를 $; }, 지연); }); 라벨 { 표시 : 블록; 여백 - 상단 : 20 픽셀; } 입력 { 상자 크기 조정 : 국경 상자; 글꼴 크기 : 상속, } #container { 위치 : 상대; } # 목표 입력 { 폭 : 250 픽셀; 패딩 : 10px; } <스크립트 SRC = "https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"> <입력 유형 = "텍스트"ID = "대상 입력"자리 = "나는 불가능 해요"/> <레이블> setTimetout에 초점


  4. 4.나는 클릭하면 텍스트를 지 웁니다 아이콘과 검색 양식을 가지고있다. 그러나 (모바일 태블릿) 문제는 클릭 이벤트를 제거 포커스가 입력에서 제거되었을 때 키보드 / 숨기기를 축소 할 것이라고했다.

    나는 클릭하면 텍스트를 지 웁니다 아이콘과 검색 양식을 가지고있다. 그러나 (모바일 태블릿) 문제는 클릭 이벤트를 제거 포커스가 입력에서 제거되었을 때 키보드 / 숨기기를 축소 할 것이라고했다.

    목표 : 검색 양식 (클릭 / 두드리고 X-아이콘)을 제거한 후에도 눈에 보이는 키보드를 계속!

    이를 위해, 그래서 같은 이벤트 인 stopPropagation ()를 적용 :

    function clear ($event) {
        $event.preventDefault();
        $event.stopPropagation();
        self.query = '';
        $timeout(function () {
            document.getElementById('sidebar-search').focus();
        }, 1);
    }
    

    그리고 HTML 양식 :

    <form ng-controller="SearchController as search"
        ng-submit="search.submit($event)">
            <input type="search" id="sidebar-search" 
                ng-model="search.query">
                    <span class="glyphicon glyphicon-remove-circle"
                        ng-click="search.clear($event)">
                    </span>
    </form>
    

  5. 5.이 솔루션은 내 전화 테스트, 잘 작동합니다 :

    이 솔루션은 내 전화 테스트, 잘 작동합니다 :

    document.body.ontouchend = function() { document.querySelector('[name="name"]').focus(); };
    

    즐겨


  6. 6.나는 다음과 같은 코드로 작동하도록 관리 :

    나는 다음과 같은 코드로 작동하도록 관리 :

    event.preventDefault();
    timeout(function () {
        $inputToFocus.focus();
    }, 500);
    

    나는 내 문제를 해결 지시문을 만든 그래서 나는 AngularJS와를 사용하고 있습니다 :

    지령:

    angular.module('directivesModule').directive('focusOnClear', [
        '$timeout',
        function (timeout) {
            return {
                restrict: 'A',
                link: function (scope, element, attrs) {
                    var id = attrs.focusOnClear;
                    var $inputSearchElement = $(element).parent().find('#' + id);
                    element.on('click', function (event) {
                        event.preventDefault();
                        timeout(function () {
                            $inputSearchElement.focus();
                        }, 500);
                    });
                }
            };
        }
    ]);
    

    지시어를 사용하는 방법 :

    <div>
        <input type="search" id="search">
        <i class="icon-clear" ng-click="clearSearchTerm()" focus-on-clear="search"></i>
    </div>
    

    지시어가 어떤 도움 경우 나도 몰라 있도록, jQuery를 사용하는 것 같습니다.


  7. 7.최신 정보

    최신 정보

    나는 또한하지만 아무 소용이 시도 :

    $(document).ready(function() {
    $('body :not(.wr-dropdown)').bind("click", function(e) {
        $('.test').focus();
    })
    $('.wr-dropdown').on('change', function(e) {
        if ($(".wr-dropdow option[value='/search']")) {
            setTimeout(function(e) {
                $('body :not(.wr-dropdown)').trigger("click");
            },3000)         
        } 
    }); 
    

    });

    당신이 당신의 JSFiddle이 잘 작동하기 때문에이 작동하지 않습니다,하지만 여기 내 제안 어쨌든라고 왜에 관해서 혼란 스러워요 ...

    당신의 클릭 이벤트에서 귀하의 setTimeout 함수에서 코드 줄을보십시오 :

    document.myInput.focus();
    

    입력 태그의 name 속성 상관 관계를 myInput.

    <input name="myInput">
    

    그리고 필드를 흐리게이 코드를 사용 :

    document.activeElement.blur();
    

  8. 8.이 시도:

    이 시도:

    input.focus();
    input.scrollIntoView()
    

  9. 9.에 탭 대신 NG-클릭 이벤트 이용하여 보시기 바랍니다. 나는이 문제를 가지고 있었다. 내가 검색 양식 라벨 안에 내 맑은 검색 창 버튼을함으로써 그것을 해결과에 탭으로 클리어 버튼을 겨 클릭을 교체했다. 지금은 잘 작동합니다.

    에 탭 대신 NG-클릭 이벤트 이용하여 보시기 바랍니다. 나는이 문제를 가지고 있었다. 내가 검색 양식 라벨 안에 내 맑은 검색 창 버튼을함으로써 그것을 해결과에 탭으로 클리어 버튼을 겨 클릭을 교체했다. 지금은 잘 작동합니다.

  10. from https://stackoverflow.com/questions/12204571/mobile-safari-javascript-focus-method-on-inputfield-only-works-with-click by cc-by-sa and MIT license