2011-12-20 20 views
6

Uso jQuery y puedo arrastrar desde jqueryUI. Cuando actualizo jQuery de 1.6 a 1.7, los atributos clientX y pageX desaparecen de la variable de evento. Aquí está un ejemplo:jQuery 1.7 clientX/pageX undefined

http://jsbin.com/ezulas/7/edit

Si en el ejemplo que se da la versión de jQuery se cambia a 1.6.4 - que empiece a funcionar. Con la última versión, tanto el cliente X/Y como el pageX/Y no están funcionando. Descubrí que puedo usar e = e.originalEvent, pero esa no parece ser la solución adecuada.

+0

Estoy teniendo exactamente el mismo problema. Creo que es un nuevo error relacionado con la forma en que está vinculado. Por ejemplo, si intenta: $ (documento) .bind ('clic', función (e) {console.log ("e.pageX:" + e.pageX + ", e.pageY:" + e.pageY) ;}); funciona totalmente bien ¿Has registrado un error con jquery? – Matt

+0

No lo logré, pensé que alguien ya había notado un error tan grande. – Thinker

+0

Parece que alguien lo hizo http://bugs.jquery.com/ticket/10729. El error aún está abierto y ha habido un gran debate sobre si debería ser arreglado y cómo. – JosephL

Respuesta

7

event.layerX y event.layerY: Hemos eliminado estas propiedades no estándar en la versión 1.7. Aunque normalmente habríamos ido al mediante un período de notificación de obsolescencia para estos, Chrome versión 16 genera una avalancha de mensajes de advertencia de la consola en la página. Debido a esto, decidimos eliminarlos inmediatamente. En las plataformas que todavía son compatibles con estas propiedades, están disponibles a través de event.originalEvent.layerX y event.originalEvent.layerY.

Fuente: http://blog.jquery.com/2011/11/03/jquery-1-7-released/

Cuando console.log(e); dentro de su controlador de eventos dragstop se puede ver que todo el x/y datos de coordenadas no se encuentra en jQuery 1.7; pero se puede acceder al event.originalEvent.

ACTUALIZACIÓN

Si miras a tu alrededor en el objeto event usted puede encontrar pageX/pageY en el origionalEvent propiedad:

$('#test').html(e.originalEvent.pageX+','+e.originalEvent.pageY); 

Aquí es una versión actualizada de su jsbin: http://jsbin.com/ezulas/13/edit

+1

Su respuesta no tiene relación. En mi pregunta, ya señalé el evento original. En documentos jQuery puedes leer que hay variables event.pageX y pageY que puedes usar. Y trabajan con 1.7. Pero no en mi caso específico. – Thinker

+1

¿Qué extrañé? Si cambia 'e.pageX' a' e.originalEvent.pageX' obtendrá la ubicación horizontal del evento. ¿Qué más estás buscando hacer? – Jasper

+2

En jQuery documentos está escrito, que accedemos a pageX utilizando event.pageX: http://api.jquery.com/event.pageX/ Pero esto no está funcionando y me pregunto sobre la forma de resolverlo, que usar soluciones temporales – Thinker

0

En los documentos jQuery para Event Object dice

Las siguientes propiedades también se copian en el objeto de evento, aunque algunos de sus valores pueden ser indefinido dependiendo del evento:

altKey, burbujas, botón, cancelable, charCode, clientX, clientY, ctrlKey, currentTarget , datos, detalles, eventPhase, metakey, offsetX, offsetY, originalTarget, pageX, pageY, prevValue, relatedTarget, screenX, screenY, shiftKey, blanco, vista, que

que parece adaptarse a lo que está diciendo. En su situación su evento no tiene páginaX y páginaY definidos.

+1

Pero fue definido en jQuery 1.6, no entiendo por qué ahora está definido en originalEvent.clientX – Thinker

1

Tuve el mismo problema y estaba buscando subprocesos similares durante bastante tiempo. Ahora es bastante tarde, pero espero que esto salve a algunos codificadores felices de la desesperación. Revisé el archivo jQuery UI Touch Punch que también estaba usando en mi proyecto y encontré cómo se refiere a la posición x/y. Esto es lo que finalmente funcionó para mí:

$('.pages').on('touchstart vmousedown', function(e){ 
    var this_event_touch_start_Y = e.originalEvent.changedTouches[0].clientY; 
    var this_event_touch_start_X = e.originalEvent.changedTouches[0].clientX; 
}); 

Para referencia, aquí una lista de todos los archivos que estoy usando jQuery:

  • jquery-3.1.1.min.js
  • jQuery. touchSwipe.min.js
  • jquery-ui.min.js
  • jquery.ui.touch-punch.min.js
  • jquery.mobile-1.4.5.min.js