WPT
wpt / touch-events / multi-touch-interfaces.html
Spec: Touch Events ↗
Runs: Chrome 155.0.8039.0 (wpt@2a20f1bd6, 2026-09-03) | Firefox 157.0a1 (wpt@b861d4d9d, 2026-09-03) | Safari 251 preview (wpt@5ce815a83, 2026-08-27) | Ladybird 1.0-a9df8 (wpt@9b4cabf6d, 2026-09-03) | Servo Servo 0.6 (wpt@7e3d005d7, 2026-09-03) | Blitz a50cb8971 (wpt@a95401e4e, 2026-09-03)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 511/511 | 430/511 | 0/511 | 0/511 | 511/511 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| touchstart event received | PASS | PASS | NOTRUN | NOTRUN | PASS | — |
| touchmove event received | PASS | PASS | NOTRUN | NOTRUN | PASS | — |
| touchend event received | PASS | PASS | NOTRUN | NOTRUN | PASS | — |
| Interaction with mouse events | PASS | PASS | FAIL | NOTRUN | PASS | — |
| touchstart1 event is a TouchEvent event | PASS | PASS | — | — | PASS | — |
| touchstart1.touches attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.touches attribute is of type TouchList | PASS | PASS | — | — | PASS | — |
| touchstart1.touches's touch list is a TouchList object | PASS | PASS | — | — | PASS | — |
| touchstart1.touches.TouchList.length attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.touches.TouchList.length attribute is of type number (unsigned long) | PASS | PASS | — | — | PASS | — |
| touchstart1.touches.TouchList.item attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.touches.TouchList.item attribute is of type function | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0]'s touch point is a Touch object | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.identifier attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.identifier attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.target attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.target attribute is of type Element | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.screenX attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.screenX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.screenY attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.screenY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.clientX attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.clientX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.clientY attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.clientY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.pageX attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.pageX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.pageY attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.touches[0].Touch.pageY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches attribute is of type TouchList | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches's touch list is a TouchList object | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches.TouchList.length attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches.TouchList.length attribute is of type number (unsigned long) | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches.TouchList.item attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches.TouchList.item attribute is of type function | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0]'s touch point is a Touch object | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.identifier attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.identifier attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.target attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.target attribute is of type Element | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.screenX attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.screenX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.screenY attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.screenY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.clientX attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.clientX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.clientY attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.clientY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.pageX attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.pageX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.pageY attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.targetTouches[0].Touch.pageY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches attribute is of type TouchList | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches's touch list is a TouchList object | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches.TouchList.length attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches.TouchList.length attribute is of type number (unsigned long) | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches.TouchList.item attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches.TouchList.item attribute is of type function | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0]'s touch point is a Touch object | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.identifier attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.identifier attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.target attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.target attribute is of type Element | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.screenX attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.screenX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.screenY attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.screenY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.clientX attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.clientX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.clientY attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.clientY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.pageX attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.pageX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.pageY attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.changedTouches[0].Touch.pageY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchstart1.altKey attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.altKey attribute is of type boolean | PASS | PASS | — | — | PASS | — |
| touchstart1.metaKey attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.metaKey attribute is of type boolean | PASS | PASS | — | — | PASS | — |
| touchstart1.ctrlKey attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.ctrlKey attribute is of type boolean | PASS | PASS | — | — | PASS | — |
| touchstart1.shiftKey attribute exists | PASS | PASS | — | — | PASS | — |
| touchstart1.shiftKey attribute is of type boolean | PASS | PASS | — | — | PASS | — |
| touchstart2 event is a TouchEvent event | PASS | — | — | — | PASS | — |
| touchstart2.touches attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches attribute is of type TouchList | PASS | — | — | — | PASS | — |
| touchstart2.touches's touch list is a TouchList object | PASS | — | — | — | PASS | — |
| touchstart2.touches.TouchList.length attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches.TouchList.length attribute is of type number (unsigned long) | PASS | — | — | — | PASS | — |
| touchstart2.touches.TouchList.item attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches.TouchList.item attribute is of type function | PASS | — | — | — | PASS | — |
| touchstart2.touches[0]'s touch point is a Touch object | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.identifier attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.identifier attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.target attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.target attribute is of type Element | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.screenX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.screenX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.screenY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.screenY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.clientX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.clientX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.clientY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.clientY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.pageX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.pageX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.pageY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[0].Touch.pageY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.touches[1]'s touch point is a Touch object | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.identifier attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.identifier attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.target attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.target attribute is of type Element | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.screenX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.screenX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.screenY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.screenY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.clientX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.clientX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.clientY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.clientY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.pageX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.pageX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.pageY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.touches[1].Touch.pageY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches attribute is of type TouchList | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches's touch list is a TouchList object | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches.TouchList.length attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches.TouchList.length attribute is of type number (unsigned long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches.TouchList.item attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches.TouchList.item attribute is of type function | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0]'s touch point is a Touch object | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.identifier attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.identifier attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.target attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.target attribute is of type Element | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.screenX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.screenX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.screenY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.screenY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.clientX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.clientX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.clientY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.clientY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.pageX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.pageX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.pageY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[0].Touch.pageY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1]'s touch point is a Touch object | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.identifier attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.identifier attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.target attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.target attribute is of type Element | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.screenX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.screenX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.screenY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.screenY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.clientX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.clientX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.clientY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.clientY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.pageX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.pageX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.pageY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.targetTouches[1].Touch.pageY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches attribute is of type TouchList | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches's touch list is a TouchList object | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches.TouchList.length attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches.TouchList.length attribute is of type number (unsigned long) | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches.TouchList.item attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches.TouchList.item attribute is of type function | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0]'s touch point is a Touch object | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.identifier attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.identifier attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.target attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.target attribute is of type Element | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.screenX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.screenX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.screenY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.screenY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.clientX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.clientX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.clientY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.clientY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.pageX attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.pageX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.pageY attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.changedTouches[0].Touch.pageY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchstart2.altKey attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.altKey attribute is of type boolean | PASS | — | — | — | PASS | — |
| touchstart2.metaKey attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.metaKey attribute is of type boolean | PASS | — | — | — | PASS | — |
| touchstart2.ctrlKey attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.ctrlKey attribute is of type boolean | PASS | — | — | — | PASS | — |
| touchstart2.shiftKey attribute exists | PASS | — | — | — | PASS | — |
| touchstart2.shiftKey attribute is of type boolean | PASS | — | — | — | PASS | — |
| touchmove1 event is a TouchEvent event | PASS | PASS | — | — | PASS | — |
| touchmove1.touches attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches attribute is of type TouchList | PASS | PASS | — | — | PASS | — |
| touchmove1.touches's touch list is a TouchList object | PASS | PASS | — | — | PASS | — |
| touchmove1.touches.TouchList.length attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches.TouchList.length attribute is of type number (unsigned long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches.TouchList.item attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches.TouchList.item attribute is of type function | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0]'s touch point is a Touch object | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.identifier attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.identifier attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.target attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.target attribute is of type Element | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.screenX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.screenX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.screenY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.screenY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.clientX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.clientX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.clientY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.clientY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.pageX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.pageX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.pageY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[0].Touch.pageY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1]'s touch point is a Touch object | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.identifier attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.identifier attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.target attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.target attribute is of type Element | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.screenX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.screenX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.screenY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.screenY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.clientX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.clientX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.clientY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.clientY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.pageX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.pageX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.pageY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.touches[1].Touch.pageY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches attribute is of type TouchList | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches's touch list is a TouchList object | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches.TouchList.length attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches.TouchList.length attribute is of type number (unsigned long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches.TouchList.item attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches.TouchList.item attribute is of type function | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0]'s touch point is a Touch object | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.identifier attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.identifier attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.target attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.target attribute is of type Element | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.screenX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.screenX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.screenY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.screenY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.clientX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.clientX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.clientY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.clientY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.pageX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.pageX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.pageY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[0].Touch.pageY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1]'s touch point is a Touch object | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.identifier attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.identifier attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.target attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.target attribute is of type Element | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.screenX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.screenX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.screenY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.screenY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.clientX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.clientX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.clientY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.clientY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.pageX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.pageX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.pageY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.targetTouches[1].Touch.pageY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches attribute is of type TouchList | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches's touch list is a TouchList object | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches.TouchList.length attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches.TouchList.length attribute is of type number (unsigned long) | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches.TouchList.item attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches.TouchList.item attribute is of type function | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0]'s touch point is a Touch object | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.identifier attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.identifier attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.target attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.target attribute is of type Element | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.screenX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.screenX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.screenY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.screenY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.clientX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.clientX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.clientY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.clientY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.pageX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.pageX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.pageY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.changedTouches[0].Touch.pageY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove1.altKey attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.altKey attribute is of type boolean | PASS | PASS | — | — | PASS | — |
| touchmove1.metaKey attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.metaKey attribute is of type boolean | PASS | PASS | — | — | PASS | — |
| touchmove1.ctrlKey attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.ctrlKey attribute is of type boolean | PASS | PASS | — | — | PASS | — |
| touchmove1.shiftKey attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove1.shiftKey attribute is of type boolean | PASS | PASS | — | — | PASS | — |
| touchmove2 event is a TouchEvent event | PASS | PASS | — | — | PASS | — |
| touchmove2.touches attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches attribute is of type TouchList | PASS | PASS | — | — | PASS | — |
| touchmove2.touches's touch list is a TouchList object | PASS | PASS | — | — | PASS | — |
| touchmove2.touches.TouchList.length attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches.TouchList.length attribute is of type number (unsigned long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches.TouchList.item attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches.TouchList.item attribute is of type function | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0]'s touch point is a Touch object | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.identifier attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.identifier attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.target attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.target attribute is of type Element | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.screenX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.screenX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.screenY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.screenY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.clientX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.clientX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.clientY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.clientY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.pageX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.pageX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.pageY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[0].Touch.pageY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1]'s touch point is a Touch object | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.identifier attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.identifier attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.target attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.target attribute is of type Element | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.screenX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.screenX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.screenY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.screenY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.clientX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.clientX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.clientY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.clientY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.pageX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.pageX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.pageY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.touches[1].Touch.pageY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches attribute is of type TouchList | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches's touch list is a TouchList object | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches.TouchList.length attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches.TouchList.length attribute is of type number (unsigned long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches.TouchList.item attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches.TouchList.item attribute is of type function | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0]'s touch point is a Touch object | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.identifier attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.identifier attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.target attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.target attribute is of type Element | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.screenX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.screenX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.screenY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.screenY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.clientX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.clientX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.clientY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.clientY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.pageX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.pageX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.pageY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[0].Touch.pageY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1]'s touch point is a Touch object | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.identifier attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.identifier attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.target attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.target attribute is of type Element | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.screenX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.screenX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.screenY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.screenY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.clientX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.clientX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.clientY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.clientY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.pageX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.pageX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.pageY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.targetTouches[1].Touch.pageY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches attribute is of type TouchList | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches's touch list is a TouchList object | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches.TouchList.length attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches.TouchList.length attribute is of type number (unsigned long) | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches.TouchList.item attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches.TouchList.item attribute is of type function | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0]'s touch point is a Touch object | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.identifier attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.identifier attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.target attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.target attribute is of type Element | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.screenX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.screenX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.screenY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.screenY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.clientX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.clientX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.clientY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.clientY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.pageX attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.pageX attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.pageY attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.changedTouches[0].Touch.pageY attribute is of type number (long) | PASS | PASS | — | — | PASS | — |
| touchmove2.altKey attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.altKey attribute is of type boolean | PASS | PASS | — | — | PASS | — |
| touchmove2.metaKey attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.metaKey attribute is of type boolean | PASS | PASS | — | — | PASS | — |
| touchmove2.ctrlKey attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.ctrlKey attribute is of type boolean | PASS | PASS | — | — | PASS | — |
| touchmove2.shiftKey attribute exists | PASS | PASS | — | — | PASS | — |
| touchmove2.shiftKey attribute is of type boolean | PASS | PASS | — | — | PASS | — |
| touchend2 event is a TouchEvent event | PASS | — | — | — | PASS | — |
| touchend2.touches attribute exists | PASS | — | — | — | PASS | — |
| touchend2.touches attribute is of type TouchList | PASS | — | — | — | PASS | — |
| touchend2.touches's touch list is a TouchList object | PASS | — | — | — | PASS | — |
| touchend2.touches.TouchList.length attribute exists | PASS | — | — | — | PASS | — |
| touchend2.touches.TouchList.length attribute is of type number (unsigned long) | PASS | — | — | — | PASS | — |
| touchend2.touches.TouchList.item attribute exists | PASS | — | — | — | PASS | — |
| touchend2.touches.TouchList.item attribute is of type function | PASS | — | — | — | PASS | — |
| touchend2.touches[0]'s touch point is a Touch object | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.identifier attribute exists | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.identifier attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.target attribute exists | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.target attribute is of type Element | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.screenX attribute exists | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.screenX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.screenY attribute exists | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.screenY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.clientX attribute exists | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.clientX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.clientY attribute exists | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.clientY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.pageX attribute exists | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.pageX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.pageY attribute exists | PASS | — | — | — | PASS | — |
| touchend2.touches[0].Touch.pageY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.targetTouches attribute exists | PASS | — | — | — | PASS | — |
| touchend2.targetTouches attribute is of type TouchList | PASS | — | — | — | PASS | — |
| touchend2.targetTouches's touch list is a TouchList object | PASS | — | — | — | PASS | — |
| touchend2.targetTouches.TouchList.length attribute exists | PASS | — | — | — | PASS | — |
| touchend2.targetTouches.TouchList.length attribute is of type number (unsigned long) | PASS | — | — | — | PASS | — |
| touchend2.targetTouches.TouchList.item attribute exists | PASS | — | — | — | PASS | — |
| touchend2.targetTouches.TouchList.item attribute is of type function | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0]'s touch point is a Touch object | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.identifier attribute exists | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.identifier attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.target attribute exists | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.target attribute is of type Element | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.screenX attribute exists | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.screenX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.screenY attribute exists | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.screenY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.clientX attribute exists | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.clientX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.clientY attribute exists | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.clientY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.pageX attribute exists | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.pageX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.pageY attribute exists | PASS | — | — | — | PASS | — |
| touchend2.targetTouches[0].Touch.pageY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.changedTouches attribute exists | PASS | — | — | — | PASS | — |
| touchend2.changedTouches attribute is of type TouchList | PASS | — | — | — | PASS | — |
| touchend2.changedTouches's touch list is a TouchList object | PASS | — | — | — | PASS | — |
| touchend2.changedTouches.TouchList.length attribute exists | PASS | — | — | — | PASS | — |
| touchend2.changedTouches.TouchList.length attribute is of type number (unsigned long) | PASS | — | — | — | PASS | — |
| touchend2.changedTouches.TouchList.item attribute exists | PASS | — | — | — | PASS | — |
| touchend2.changedTouches.TouchList.item attribute is of type function | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0]'s touch point is a Touch object | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.identifier attribute exists | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.identifier attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.target attribute exists | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.target attribute is of type Element | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.screenX attribute exists | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.screenX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.screenY attribute exists | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.screenY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.clientX attribute exists | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.clientX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.clientY attribute exists | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.clientY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.pageX attribute exists | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.pageX attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.pageY attribute exists | PASS | — | — | — | PASS | — |
| touchend2.changedTouches[0].Touch.pageY attribute is of type number (long) | PASS | — | — | — | PASS | — |
| touchend2.altKey attribute exists | PASS | — | — | — | PASS | — |
| touchend2.altKey attribute is of type boolean | PASS | — | — | — | PASS | — |
| touchend2.metaKey attribute exists | PASS | — | — | — | PASS | — |
| touchend2.metaKey attribute is of type boolean | PASS | — | — | — | PASS | — |
| touchend2.ctrlKey attribute exists | PASS | — | — | — | PASS | — |
| touchend2.ctrlKey attribute is of type boolean | PASS | — | — | — | PASS | — |
| touchend2.shiftKey attribute exists | PASS | — | — | — | PASS | — |
| touchend2.shiftKey attribute is of type boolean | PASS | — | — | — | PASS | — |
| touchstart1.touches[1]'s touch point is a Touch object | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.identifier attribute exists | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.identifier attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.target attribute exists | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.target attribute is of type Element | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.screenX attribute exists | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.screenX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.screenY attribute exists | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.screenY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.clientX attribute exists | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.clientX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.clientY attribute exists | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.clientY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.pageX attribute exists | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.pageX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.pageY attribute exists | — | PASS | — | — | — | — |
| touchstart1.touches[1].Touch.pageY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1]'s touch point is a Touch object | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.identifier attribute exists | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.identifier attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.target attribute exists | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.target attribute is of type Element | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.screenX attribute exists | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.screenX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.screenY attribute exists | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.screenY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.clientX attribute exists | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.clientX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.clientY attribute exists | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.clientY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.pageX attribute exists | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.pageX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.pageY attribute exists | — | PASS | — | — | — | — |
| touchstart1.targetTouches[1].Touch.pageY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1]'s touch point is a Touch object | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.identifier attribute exists | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.identifier attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.target attribute exists | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.target attribute is of type Element | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.screenX attribute exists | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.screenX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.screenY attribute exists | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.screenY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.clientX attribute exists | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.clientX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.clientY attribute exists | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.clientY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.pageX attribute exists | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.pageX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.pageY attribute exists | — | PASS | — | — | — | — |
| touchstart1.changedTouches[1].Touch.pageY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1 event is a TouchEvent event | — | PASS | — | — | — | — |
| touchend1.touches attribute exists | — | PASS | — | — | — | — |
| touchend1.touches attribute is of type TouchList | — | PASS | — | — | — | — |
| touchend1.touches's touch list is a TouchList object | — | PASS | — | — | — | — |
| touchend1.touches.TouchList.length attribute exists | — | PASS | — | — | — | — |
| touchend1.touches.TouchList.length attribute is of type number (unsigned long) | — | PASS | — | — | — | — |
| touchend1.touches.TouchList.item attribute exists | — | PASS | — | — | — | — |
| touchend1.touches.TouchList.item attribute is of type function | — | PASS | — | — | — | — |
| touchend1.targetTouches attribute exists | — | PASS | — | — | — | — |
| touchend1.targetTouches attribute is of type TouchList | — | PASS | — | — | — | — |
| touchend1.targetTouches's touch list is a TouchList object | — | PASS | — | — | — | — |
| touchend1.targetTouches.TouchList.length attribute exists | — | PASS | — | — | — | — |
| touchend1.targetTouches.TouchList.length attribute is of type number (unsigned long) | — | PASS | — | — | — | — |
| touchend1.targetTouches.TouchList.item attribute exists | — | PASS | — | — | — | — |
| touchend1.targetTouches.TouchList.item attribute is of type function | — | PASS | — | — | — | — |
| touchend1.changedTouches attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches attribute is of type TouchList | — | PASS | — | — | — | — |
| touchend1.changedTouches's touch list is a TouchList object | — | PASS | — | — | — | — |
| touchend1.changedTouches.TouchList.length attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches.TouchList.length attribute is of type number (unsigned long) | — | PASS | — | — | — | — |
| touchend1.changedTouches.TouchList.item attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches.TouchList.item attribute is of type function | — | PASS | — | — | — | — |
| touchend1.changedTouches[0]'s touch point is a Touch object | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.identifier attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.identifier attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.target attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.target attribute is of type Element | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.screenX attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.screenX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.screenY attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.screenY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.clientX attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.clientX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.clientY attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.clientY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.pageX attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.pageX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.pageY attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[0].Touch.pageY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.changedTouches[1]'s touch point is a Touch object | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.identifier attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.identifier attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.target attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.target attribute is of type Element | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.screenX attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.screenX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.screenY attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.screenY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.clientX attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.clientX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.clientY attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.clientY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.pageX attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.pageX attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.pageY attribute exists | — | PASS | — | — | — | — |
| touchend1.changedTouches[1].Touch.pageY attribute is of type number (long) | — | PASS | — | — | — | — |
| touchend1.altKey attribute exists | — | PASS | — | — | — | — |
| touchend1.altKey attribute is of type boolean | — | PASS | — | — | — | — |
| touchend1.metaKey attribute exists | — | PASS | — | — | — | — |
| touchend1.metaKey attribute is of type boolean | — | PASS | — | — | — | — |
| touchend1.ctrlKey attribute exists | — | PASS | — | — | — | — |
| touchend1.ctrlKey attribute is of type boolean | — | PASS | — | — | — | — |
| touchend1.shiftKey attribute exists | — | PASS | — | — | — | — |
| touchend1.shiftKey attribute is of type boolean | — | PASS | — | — | — | — |