2011-12-20 57 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