traba teclados teclado tamaƱo para letras funcionan descargar como cambiar aumentar algunas acomodar javascript jquery ios iphone iframe

javascript - teclados - teclado iphone descargar



el teclado del iPhone no se esconde al tocar la pantalla (7)

Bueno ... Puedes darme esa recompensa porque acabo de resolver este problema usando una solución muy SIMPLE .

Paso 1 : compruebe si la entrada está actualmente enfocada. Explicaré más adelante por qué necesitamos agregar un retraso para cambiar el valor de la variable inputFocused .

var inputFocused = false; $(''input'').focus(function(){ setTimeout(function(){ inputFocused = true; },100); });

Paso 2: agregue un detector de eventos si se toca o hace clic en la pantalla o $(window) . Si se hizo clic o se hizo clic en la ventana, compruebe si la entrada está actualmente enfocada. Si es verdadero , debe enfocar la ventana $(window).focus() , después de enfocar la ventana, la función blur () ahora funcionará. por lo que ahora puede desenfocar el elemento de entrada, el teclado se ocultará automáticamente y luego establecerá la variable de entrada en inputFocused en falso nuevamente.

$(window).click(function(){ if(inputFocused == true){ $(window).focus(); var input = $(''input''); input.blur(); inputFocused = false; } });`

Explicación de SetTimeout: El evento $(window).click() se activará si el usuario toca o hace clic en cualquier parte de la pantalla (por ejemplo , hacer clic en el botón, hacer clic en la entrada, tocar o hacer clic en la pantalla, etc. ). Si toca la entrada, al mismo tiempo configura la entrada inputFocused en verdadero , el evento $(window).click() activa y luego verifica si inputFocused es verdadero y luego ejecutará el código que oculta el teclado virtual. Entonces, cada vez que enfoque un campo de entrada, el teclado se ocultará y eso será un problema.

Es por eso que estamos agregando un retraso para que el código dentro de if(inputFocused == true) no se ejecute mientras estamos enfocando el campo de entrada y solo se ejecutará si el campo de entrada está actualmente en foco.

¡TRATADO Y PROBADO!

Tengo un campo de entrada con tipo de número

<input type="number" pattern="[0-9]*"/>

En los navegadores normales, estoy escribiendo algunos números y estoy tocando la pantalla, oculta el teclado de iphone / ipad.

Pero esto no funciona si está dentro de iframe . tenemos que hacer clic en el botón de hecho de forma explícita. Este problema es solo para iphone / ipad

Este es un problema de iframe. Cualquier corrección usando Javascript / Jquery sería muy apreciada.

Actualizado

Intentó

document.activeElement.blur();

y el enfoque cuando el evento se desencadena en javascript. ninguno de ellos está funcionando ..

$(document).on(''focusin'', function(){ $(''input'').css("background-color", "green"); console.log(''focusin!'') }); $(document).on(''focusout'', function(){ console.log(''focusout!'') $(''input'').css("background-color", "yellow"); $(''input'').blur(); });

¡focusout no está llamando dentro de iframe!

Mi pregunta es **How to force close ipad/iphone keypad when input element is not focused using Javascript/Jquery?**

¡Las respuestas serán recompensadas como se indica!


En una aplicación iónica utilicé una directiva sobre el cuerpo que intercepta las entradas.

MyApp.directive(''dismissIosKeyboardOnClick'', function () { return function (scope, element, attrs) { if (cordova.platformId=="ios") { element.on("touchstart", function(e) { var keyboardDoms = new Set(["INPUT","TEXTAREA","SELECT"]); if( keyboardDoms.has(document.activeElement.nodeName) && !keyboardDoms.has(e.target.nodeName) ) document.activeElement.blur(); }); } }; });

Index.html

<body ... dismiss-ios-keyboard-on-click></body>


Espero que esto resuelva tu problema, simplemente elimina el foco en el elemento activo.

  • Usando Javascript

document.activeElement.blur();

  • Usando jQuery

$("#Clicked_button_id").click(function() { $("#input_field_id").blur(); });


Para quitar el teclado, debe perder el foco en su entrada.

document.activeElement.blur();

Con esta línea, eliminas el foco y el teclado desaparece.

En su caso, es posible agregar un evento en su cuerpo y detener este evento si hace clic en una entrada.

$(document).ready(function () { $(''body'').click(function () { document.activeElement.blur(); console.log("blur"); }); $(''input'').click(function (event) { event.stopPropagation(); }); });

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="text"/>

Actualizar

Encontré esta answer para obtener un elemento activo en un iframe.

/** * Return the active element in the main web or iframes * @return HTMLElement **/ function getActiveElement() { var focused = false; // Check if the active element is in the main web or no if (document.body === document.activeElement || document.activeElement instanceof HTMLIFrameElement) { // Search in iframes $(''iframe'').each(function() { var element = this.contentWindow.document.activeElement; // If there is a active element if (element !== this.contentWindow.document.body) { focused = element; return false; // Stop searching } }); } else focused = document.activeElement; return focused; // Return element }

Con esta función puede obtener el elemento activo en el documento o en un iframe.

Después, debe quitar el foco en este elemento para ocultar el teclado.

getActiveElement().blur();


Posiblemente tenga una solución para tu problema en iOS. Mi configuración es safari en iOS 8.3 / 5C.

A partir de mis experimentos, me parece que el elemento del cuerpo en Safari / iOS no es receptivo a ningún evento de clic. No puedo explicar por qué, pero parece que sí.

Entonces, lo que he hecho es: poner un envoltorio div justo dentro del cuerpo y permitir que reciba el clic.

Main.html

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>keyboard hide issue</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(document).ready(function() { //!SOLUTION $(''#body-wrapper'').click(function(e) { console.log(''I got clicked''); }); }); </script> <style> /* ignore this. Its just styles. ... */ div#body-wrapper { height: 200px; width: 100%; background-color: red; } input { margin: 10px; } </style> </head> <body> <div id="body-wrapper"> <input type="text" id="main-input1"/> <input type="number" id="main-input2"/> <input type="email" id="main-input3"/> </div> <iframe src="blur.html"></iframe> </body> </html>

blur.html

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Blur iFrame</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(document).ready(function() { //!SOLUTION $(''#wrapper'').click(function(e) { //do nothing }); }); </script> <style> /* ignore this. Its just styles. ... */ div#wrapper { height: 100px; width: 100%; background-color: yellow; } </style> </head> <body> <div id="wrapper"> <input type="number" pattern="[0-9]*" id="main-input"/> </div> </body> </html>

En ambos archivos, puedo ocultar el teclado muy bien. Una vez más, no conozco la razón subyacente, pero háganme saber si no puede replicar la solución.

No lo he probado en un iPad. Gracias ...


Prueba esto. Esto detecta cuando tabula cualquier elemento excepto la entrada y luego lo desenfoca.

$("html").children().not("#input_field_id").click(function(){ $("#input_field_id").blur(); });


html target <input> y <textarea> , iphone y ipad no ocultan el teclado al grabar en el área en blanco, ¡pero Android lo hará! necesitamos ocultar el teclado a mano, significa configurar el desenfoque de la entrada;

aquí gose el código

$(function(){ var cacheInput = null; var timer = null; if(!isApple()){ return false; } $(document).on(''focus'',''input'',function(e){ cacheInput = e.target; }) $(document).on(''focus'',''textarea'',function(e){ cacheInput = e.target; }) $(document).on(''touchend'',function(e){ if(e.target.tagName!==''INPUT''&&e.target.tagName!==''TEXTAREA''){ if(cacheInput!==null){ timer = setTimeout(function(){ cacheInput.blur(); clearTimeout(timer); },300) } } }) function isApple(){ var ua = navigator.userAgent.toUpperCase(); var ipad = ua.indexOf(''IPAD'')>-1, ipod = ua.indexOf(''IPOD'')>-1, iphone = ua.indexOf(''IPHONE'')>-1 ; return ipad || ipod || iphone ; } })

github: https://github.com/wikieswan/iphone-input-blur

demo: http://wikieswan.github.io/iphone-input-blur