Me tomó un poco, pero descubrí que no puedo hacer clic en mis entradas debido a la secuencia de comandos touch.punch que estoy usando para habilitar la funcionalidad de arrastre de la interfaz de usuario de jquery en dispositivos táctiles. ¿Alguien familiarizado con este script sabe por qué podría ser? La forma realmente reside en el árbol del objeto principal. ¿Alguien sabe una forma en que puedo anular o forzar a través de la selección? Voy a probar los eventos vinculantes que fuerzan el enfoque a la entrada en este momento, pero tal vez alguien aquí tiene alguna idea?La secuencia de comandos jquery.ui.touch.punch.js impide la funcionalidad de entrada en dispositivos táctiles
Respuesta
Para cualquier persona que pueda terminar aquí con una situación similar utilizando el muy útil toque.punch hack, simplemente forzando la atención a través de un clic en el evento funcionará muy bien!
$('.input').bind('click', function(){
$(this).focus();
});
OK aquí hay otra solución si su textfield
cualquier elemento HTML está no se está centrando, el desplazamiento, la selección de palabras, moviendo el cursor de texto en todo el texto y lo que sea diferente escenarios podría llegar entonces es posible anular el jquery.ui . touch.punch.js script. Supongo que su elemento no es el que se puede arrastrar, pero probablemente sea un elemento secundario, como era mi caso.
Ponga una clase en su elemento html, por ejemplo class="useDefault"
. luego ir al archivo de guión y encontrar esa parte:
...
function simulateMouseEvent (event, simulatedType) {
// Ignore multi-touch events
if (event.originalEvent.touches.length > 1) {
return;
}
event.preventDefault();
var touch = event.originalEvent.changedTouches[0],
simulatedEvent = document.createEvent('MouseEvents');
....
Como podrán ver event.preventDefault();
asegura que jquery.ui.touch.punch.js anula el comportamiento por defecto del navegador. Para evitar que nuestro nodo particular de clase, realizar las siguientes modificaciones:
if (event.originalEvent.touches.length > 1) {
return;
}
var touch = event.originalEvent.changedTouches[0],
simulatedEvent = document.createEvent('MouseEvents');
//As you can see here is your class element check
if (touch.target.className === "useDefault") {
event.stopPropagation();
} else {
event.preventDefault();
}
Esta solución se prueba con webkit navegadores solamente y jQuery UI táctil ponche 0.2.2 liberación.
la esperanza de que la solución rápida ayuda, BR
JEditable + jQuery UI Sortable + jquery.ui.touch-punch
He pasado todo el día en este problema y finalmente me di cuenta de la solución. La solución es muy similar a la respuesta de kidwon. Sin embargo, estaba usando jeditable que crea dinámicamente campos de entrada sin nombres de clase. Así que he usado esta declaración condicional en lugar de comprobar el nombre de clase:
//Check if element is an input or a textarea
if ($(touch.target).is("input") || $(touch.target).is("textarea")) {
event.stopPropagation();
} else {
event.preventDefault();
}
Creo que esta es una solución mejor, ya que siempre utiliza la funcionalidad nativa para cualquier campo de entrada o de área de texto.
Usted ... Son ... ¡Increíble! usted acaba de hacer mi día – GETah
Puede simplificar esto aún más usando ': input' en lugar de' input' y 'textarea': // Compruebe si el elemento es una entrada o un área de texto if ($ (touch.target)) .is (": entrada")) { event.stopPropagation(); } else { event.preventDefault(); } – Lisa
Amigos, las otras dos respuestas aquí NO funcionaron para mí, pero la solución de Danwilliger funciona; sin embargo, no está claro en su respuesta cómo configurarlo exactamente en el archivo Touch Punch JS. Para futuros buscadores de respuestas, esto es lo que debes hacer. Una vez más, esta es la solución de Danwilliger, solo estoy aclarando.
cambio en esta sección jquery.ui.touch-punch.js (aproximadamente en la línea 30):
function simulateMouseEvent (event, simulatedType) {
// Ignore multi-touch events
if (event.originalEvent.touches.length > 1) {
return;
}
event.preventDefault();
var touch = event.originalEvent.changedTouches[0],
simulatedEvent = document.createEvent('MouseEvents');
A esto:
function simulateMouseEvent (event, simulatedType) {
// Ignore multi-touch events
if (event.originalEvent.touches.length > 1) {
return;
}
var touch = event.originalEvent.changedTouches[0],
simulatedEvent = document.createEvent('MouseEvents');
//Check if element is an input or a textarea
if ($(touch.target).is("input") || $(touch.target).is("textarea")) {
event.stopPropagation();
} else {
event.preventDefault();
}
mejor de las suertes!
Los amo a los dos. ¡AMOR, DIJE! – Mark
Gracias a @Danwilliger y @jeremytripp por la solución. Siendo que este problema se conoce desde hace años y, sin embargo todavía no se ha trabajado en Git repo del autor tacto-punch, que en forma de horquilla con la solución añade aquí:
https://github.com/copernicus365/jquery-ui-touch-punch/blob/master/jquery.ui.touch-punch.js
estaría muy feliz por el autor para incorporar esas pocas líneas de un cambio en la biblioteca original y hacer esto innecesario, pero si eso nunca sucede, es bueno tener un solo archivo fuente para referencia.
De hecho, traté de agregar las líneas que Danwilliger mencionó, no funcionó el truco para mí.
lo que funcionó para mí fue
//Check if element is an input or a textarea
if ($(touch.target).is("input") || $(touch.target).is("textarea")) {
event.stopPropagation();
$(touch.target).focus();
} else {
event.preventDefault();
}
No estoy realmente seguro de por qué las otras respuestas publicadas no funcionaron, pero para alguien más por ahí si tienen el mismo tema a tratar mi solución fuera :).
La respuesta de Jacob funcionó con una ligera modificación: descubrí que el uso del evento click
daba como resultado un comportamiento incoherente en iPad, ios9 Safari. A veces presioné una vez en un campo y se enfocaría, otras veces tuve que presionar tres veces. Cambio de click
a touchstart
resuelto el problema para mí (También utilicé delegación de eventos ya que mi forma se añadió de forma dinámica):
$('form').on('touchstart', 'input,textarea',function(){
$(this).focus();
});
Una solución es utilizar un mango. Agregue un ícono adentro y use esto para arrastrar. Entonces las entradas funcionan bien.
<li><span class="move">Move</span><input...../></li>
$("#sortableList").sortable({
handle: ".move"
});
La solución de Throttlehead funcionó para mí. Más simple quizás para simplemente usar los selectores de JQuery para cubrir todas las entradas y áreas de texto:
$('input,textarea').bind('click', function(){
$(this).focus();
});
- 1. funcionalidad de las pantallas táctiles y la entrada del usuario
- 2. Cargando la secuencia de comandos JS solo para dispositivos iOS?
- 3. Cómo ejecutar la secuencia de comandos de Monkeyrunner en varios dispositivos al mismo tiempo
- 4. Pasando el valor de la secuencia de comandos PHP a la secuencia de comandos de Python
- 5. no espera la entrada del usuario en la secuencia de comandos expect
- 6. La secuencia de comandos PHP no puede obtenerse desde la secuencia de comandos de Python
- 7. jQuery Arrastrar y soltar en dispositivos táctiles (iPad, Android)
- 8. Ocultar entrada en la línea de comandos
- 9. ¿Cómo se determina la altura de la pantalla en los dispositivos táctiles Blackberry?
- 10. ¿Asincronizar la secuencia de comandos de vim?
- 11. Secuencia de comandos para habilitar/deshabilitar elementos de entrada?
- 12. secuencia de comandos para realizar la entrada de contenido en un archivo de texto
- 13. ¿Cómo ejecuto una secuencia de comandos Perl en múltiples archivos de entrada con la misma extensión?
- 14. Argumento booleano para la secuencia de comandos
- 15. secuencia de comandos ajax independiente
- 16. Cómo conectar la ranura PyQt de la secuencia de fondo a la secuencia de comandos
- 17. Cómo simular el efecto de desplazamiento sobre los dispositivos táctiles?
- 18. recomendación para la secuencia de comandos de la galería
- 19. Cómo ocultar botones táctiles suaves en dispositivos como Galaxy Nexus
- 20. ¿Cómo hacer que FullCalendar funcione en dispositivos táctiles?
- 21. Ignorar jQuery hover (mouseenter, mouseleave) en dispositivos táctiles
- 22. entorno RoR en la secuencia de comandos independiente de Ruby
- 23. En la secuencia de comandos de Python, ¿cómo configuro PYTHONPATH?
- 24. iframe indefinido en la secuencia de comandos de Greasemonkey
- 25. URL de la secuencia de comandos actual en JavaScript
- 26. Cifrado de la secuencia de comandos R en MS-Windows
- 27. ¿Cómo impide SQLParameter la inyección de SQL?
- 28. La interrupción de subproceso no finaliza la llamada de bloqueo en la secuencia de entrada lee
- 29. La entrada de la línea de comandos causa SyntaxError
- 30. la forma de ejecutar varios comandos por lotes en secuencia
Obligándolo a trabajar. Sin embargo, voy a dejar esta página aquí respondida para cualquier otra persona que pueda encontrar este problema. – Throttlehead
¡Excelente pregunta! +1. ¡Sin embargo, debes aceptar @Danwilliger en su lugar! – GETah