- From: sb3nder via GitHub <noreply@w3.org>
- Date: Thu, 09 Oct 2025 15:37:56 +0000
- To: public-pointer-events@w3.org
sb3nder has just created a new issue for https://github.com/w3c/pointerevents: == Are click events forwarded from `<label>` considered to be generated by a pointing device? == The spec says: >- If the events are generated by a pointing device, their <!---0.272262%--><a data-link-type="idl" data-xref-type="attribute|dict-member|const" data-link-for="PointerEvent" data-xref-for="PointerEvent" href="#dom-pointerevent-pointerid" class="internalDFN" id="ref-for-dom-pointerevent-pointerid-19"><code>pointerId<!---0.272262%--></code></a><!---0.272262%--> and <code>pointerType</code> <em class="rfc2119">MUST<!---0.272262%--></em> be the same as the PointerEvents that caused these events. >- If the events are generated by a non-pointing device (such as voice recognition software or a keyboard interaction), <!---0.272262%--><a data-link-type="idl" data-xref-type="attribute|dict-member|const" data-link-for="PointerEvent" data-xref-for="PointerEvent" href="#dom-pointerevent-pointerid" class="internalDFN" id="ref-for-dom-pointerevent-pointerid-20"><code>pointerId<!---0.272262%--></code></a><!---0.272262%--> <em class="rfc2119">MUST<!---0.272262%--></em> be <code>-1</code> and <code>pointerType</code> <em class="rfc2119">MUST<!---0.272262%--></em> be an empty string. Based on this, I would expect that if I click a `<label>` using a pointing device, the click event that is forwarded to the associated control would have the same `pointerType` and `pointerId` Firefox behaves as I would expect. In Chrome, however, the click event fired on the associated control has `pointerType: ""` and `pointerId: -1`. If this is a bug, I'm happy to report it. <details> <summary>For now, I have a sort of workaround that covers some cases:</summary> ```js document.addEventListener('click', (e) => { if (e.isTrusted) { const isFirefox = navigator.userAgent.indexOf("Firefox") > -1; console.log(e); console.log(`click: ${isFirefox ? 'Firefox' : 'Chrome'}`, { detail: e.detail, pointerType: e.pointerType, pointerId: e.pointerId, target: e.target, explicitOriginalTarget: e.explicitOriginalTarget, sourceCapabilities: e.sourceCapabilities }); if (isFirefox) { // Firefox // pen pointerType don't work if (e.pointerId >= 0) { // originated from a user pointer click if (e.target.contains(e.explicitOriginalTarget)) { // user pointer click if (e.detail >= 1) { // normal console.log(`user ${e.pointerType}-pointer click`); } else if (e.detail === 0) { // when you click on a select option console.warn(`user strange ?${e.pointerType}-pointer click`); } } else { // from label click console.log(`from-label ${e.pointerType}-pointer click`); } } else if (e.pointerId === -1) { // user keyboard click console.log('user keyboard click'); } } else { // Chrome if (e.sourceCapabilities !== null) { // originated from a user pointer click if (e.pointerId >= 0) { // user click if (e.detail >= 1) { // normal console.log(`user ${e.pointerType}-pointer click`); } else if (e.detail === 0) { // when you click on a select option console.warn(`user strange ?${e.pointerType}-pointer click`); } } else if (e.pointerId === -1) { // from label click console.log(`from-label ?${e.pointerType}-pointer click`); } } else if (e.pointerId === -1) { // user keyboard click console.log('user keyboard click'); } } } }, true); ``` </details> --- **Another thing that may be relevant:** In both Chrome and Firefox, interacting with a `<select>` fires click events with `detail: 0`, `pointerType: ""`, and `pointerId: 0` for both pointer and keyboard input. Please view or discuss this issue at https://github.com/w3c/pointerevents/issues/554 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Thursday, 9 October 2025 15:37:57 UTC