[JQUERY] 모바일 사파리 : inputfield에 자바 스크립트 초점 () 메서드는 클릭으로 작동?
JQUERY모바일 사파리 : inputfield에 자바 스크립트 초점 () 메서드는 클릭으로 작동?
해결법
-
1.사실, 사람들은 방법이있다. 나는 [삭제됨 LINK] (아이폰 또는 아이 패드에 그것을 시도)이를 알아 내기 위해 힘차게 싸워.
사실, 사람들은 방법이있다. 나는 [삭제됨 LINK] (아이폰 또는 아이 패드에 그것을 시도)이를 알아 내기 위해 힘차게 싸워.
이 텍스트 상자를 보내고 () 초점에 올 때 기본적으로 터치 스크린 장치의 Safari는 인색하다. 당신이 클릭 할 경우에도 일부 데스크탑 브라우저가 더 잘 할 (). 초점을 (). 그러나 터치 스크린 장치에서 사파리의 디자이너는 키보드가 계속 올라오고 때 초점은 다음과 같은 조건에만 표시했다 그래서, 사용자에게 성가신 실현 :
1) 사용자는 클릭 이벤트를 실행하는 동안 어딘가에 초점 ()가 호출 된 클릭. jQuery를에 옵션 : 당신이 AJAX 호출을 수행하는 경우에, 당신은 사용되지 않는 (하지만 여전히 가능) $ 아약스 ({거짓 비동기})와 같은 기적을 수행해야합니다.
2) 또한 - 다른 텍스트 상자가 시간에 집중하면 여전히 작동하지 않는 것) 초점 (-이 사람은 잠시 동안 바쁜 날을 지켰다. 나는 이동 버튼의 touchstart 이벤트에 텍스트 상자를 흐리게 시도 있도록 AJAX를했던 "이동"버튼을했지만, 단지 키보드를 만들어 사라지고 나는 이동에 클릭을 완료 할 수있는 기회를 가지기 전에 뷰포트를 이동하는 것이 단추. 마지막으로 나는 이동 버튼의 touchend 이벤트에 텍스트 상자를 흐리게 시도하고,이 마법처럼 일했다!
당신이 함께 # 1과 # 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.나는 최근에 같은 문제에 직면했다. 나는 분명히 모든 장치를 작동하는 솔루션을 발견했다. 프로그래밍 방식으로 비동기 초점을 할 수 있지만 다른 입력이 이미 집중 될 때 당신은 당신의 목표 입력 포커스를 전환 할 수 있습니다. 그래서 당신은 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"> script>
<입력 유형 = "텍스트"ID = "대상 입력"자리 = "나는 불가능 해요"/> <레이블> setTimetout에 초점 라벨> DIV>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.이 솔루션은 내 전화 테스트, 잘 작동합니다 :
이 솔루션은 내 전화 테스트, 잘 작동합니다 :
document.body.ontouchend = function() { document.querySelector('[name="name"]').focus(); };
즐겨
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.최신 정보
최신 정보
나는 또한하지만 아무 소용이 시도 :
$(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.이 시도:
이 시도:
input.focus(); input.scrollIntoView()
9.에 탭 대신 NG-클릭 이벤트 이용하여 보시기 바랍니다. 나는이 문제를 가지고 있었다. 내가 검색 양식 라벨 안에 내 맑은 검색 창 버튼을함으로써 그것을 해결과에 탭으로 클리어 버튼을 겨 클릭을 교체했다. 지금은 잘 작동합니다.
에 탭 대신 NG-클릭 이벤트 이용하여 보시기 바랍니다. 나는이 문제를 가지고 있었다. 내가 검색 양식 라벨 안에 내 맑은 검색 창 버튼을함으로써 그것을 해결과에 탭으로 클리어 버튼을 겨 클릭을 교체했다. 지금은 잘 작동합니다.
from https://stackoverflow.com/questions/12204571/mobile-safari-javascript-focus-method-on-inputfield-only-works-with-click by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 자바 스크립트를 다운로드 이미지 (0) 2020.10.27 [JQUERY] .animate ()의 콜백은 두 번 JQuery와 호출되는 (0) 2020.10.27 [JQUERY] 어떻게 jQuery.ajax와 FormData를 사용하여 파일을 업로드 (0) 2020.10.27 [JQUERY] 어떻게 재 지정없이 HTML 양식을 제출 (0) 2020.10.27 [JQUERY] 수직 스크롤을 기반으로 jQuery로 / 제거 클래스를 추가 하시겠습니까? (0) 2020.10.27