2011-12-20 63 views
6

我使用jQuery和可从jqueryUI拖动。当我将jQuery从1.6更新到1.7时,clientX和pageX属性从事件变量中消失。这里有一个例子:jQuery 1.7 clientX/pageX undefined

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

如果在给定的例子jQuery的版本改为1.6.4 - 它开始工作。使用最新版本 - clientX/Y和pageX/Y都不起作用。我发现我可以使用e = e.originalEvent - 但这似乎不是合适的解决方案。

+0

我有这个完全相同的问题。我认为它是一个处理它绑定方式的新bug。例如,如果您尝试:$(document).bind('click',function(e){console.log(“e.pageX:”+ e.pageX +“,e.pageY:”+ e.pageY) ;});它完全正常工作。你记录了一个与jQuery的错误? – Matt 2012-01-04 19:46:17

+0

我没有登录它,我以为有人已经注意到这个大错误。 – Thinker 2012-01-06 11:58:26

+0

看起来像有人做了http://bugs.jquery.com/ticket/10729。该错误仍然存​​在,关于它是否应该修复以及如何修复这个问题一直存在很多争议。 – JosephL 2012-03-07 22:29:17

回答

7

event.layerX和event.layerY:我们在版本1.7中删除了这些非标准 属性。虽然我们通常会在这些通过弃用通知期间过去,但Chrome版本16 会在页面上生成大量控制台警告消息。由于 这个,我们决定立即删除它们。在仍支持这些属性的平台上,它们可通过 event.originalEvent.layerX和event.originalEvent.layerY获得。

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

当你console.log(e);dragstop事件处理中,你可以看到,所有的x/y坐标数据的jQuery 1.7缺失;但可通过event.originalEvent访问。

UPDATE

如果在event对象看看周围,你可以找到在origionalEvent财产pageX/pageY

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

这是你jsbin的更新版本:http://jsbin.com/ezulas/13/edit

+1

你的答案听起来没有关系。在我的问题中,我已经指出了originalEvent。在jQuery文档中,您可以阅读,有event.pageX和pageY变量,您可以使用。他们与1.7一起工作。但不是在我的具体情况。 – Thinker 2011-12-21 17:45:36

+1

我错过了什么?如果将“e.pageX”更改为“e.originalEvent.pageX”,则会获得事件的水平位置。你还想要做什么? – Jasper 2011-12-21 17:58:13

+2

在jQuery文档中,我们使用event.pageX访问pageX:http://api.jquery.com/event.pageX/但是,这不起作用,我想知道如何解决它,而不是使用变通办法。 – Thinker 2011-12-22 20:08:37

0

Event Object的jQuery文档中,它说

以下属性也被复制到事件对象,虽然他们的一些值可以根据事件是未定义:

方altKey,气泡,按钮,取消,则charCode,clientX,clientY,中ctrlKey,currentTarget当前,数据,详细,的EventPhase,metaKey,OFFSETX,OFFSETY,originalTarget,pageX属性,pageY,prevValue,relatedTarget,screenX,screenY,Shift键,,目标,看来,这

这似乎符合你说的话。在您的情况下,您的活动没有定义pageX和pageY。

+1

但它是在jQuery 1.6中定义的,不明白为什么现在它在originalEvent.clientX下定义 – Thinker 2012-03-07 12:09:00

1

我遇到了同样的问题,并且在相当长的一段时间内搜索了类似的线程。 现在已经很晚了,但是我希望这样可以让绝望中的一些快乐编码者节省下来。 我检查了我在项目中使用的jQuery UI Touch Punch文件,并发现它是如何引用x/y位置的。 这是什么最终为我工作:

$('.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; 
}); 

供参考,在这里我使用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