Page MenuHomePhabricator

Shift-clicking checkboxes in Opera 9.2
Closed, ResolvedPublic


Author: alexsm333

Checkbox checked state during mouseUp event

When you try using shift-clicking checkboxes in Opera 9.20, for example on, it doesn't work properly like in other browsers.

Why: the code
if ( is_opera ) { // opera has already toggled the checkbox by this point

endState = !endState;

in checkboxMouseupHandler() in

What the comment says is not true, at least for Opera 9.2. Try attached example in Opera and Firefox/IE and behaviour is the same: mouseup event shows previous checkbox state.

Suggestion: determine which exactly old Opera versions behave incorrectly and modify the condition above.

Version: 1.11.x
Severity: normal




Event Timeline

bzimport raised the priority of this task from to Medium.Nov 21 2014, 9:48 PM
bzimport set Reference to bz10642.

Fixed in r24272:

The previous code was using the 'onmouseup' event to trigger the shift-click multiple selection behavior. This had a number of problems:

  • Opera 6.0 doesn't fire this event on radio buttons
  • Opera 7.x and 8.x flip the check state before sending the event, while Opera 9.x and other browsers flip it after
  • A UA check for Opera was used to work around the state inconsistency for 7.x and 8.x, which broke on 9.x
  • Minor quibble: the event fires if you click outside the radio and release while the mouse is over it, though that wouldn't normally count as a click on the radio.

I've switched it to use the 'onclick' event handler instead, which resolves this:

  • Opera 6.x fires this event
  • All tested browsers have flipped the check state before the event, so special-case code can be removed.

Tested browsers:

  • Opera 9.2, 9.0, 8.5, 8.0, 7.5, 6.0/Mac
  • Firefox 2/Mac
  • Safari 2/Mac
  • Safari 3/Win
  • IE 7/Win
  • IE 6/Win
  • IE 5.2/Mac
  • iCab 3/Mac
  • Mozilla 1.1/Mac

nvervelle wrote:

I think the bug fix introduced a side effect :

I have created an extension that can create checkboxes through Javascript with my on event handler for onclick(). With this fix, checkboxes don't work any more (no events). See for an example

Could wikibits.js be modified again for only calling "cb.onclick = checkboxMouseupHandler" only when there's not already a handler for cb.onclick ?

Thanks in advance,

Switching to adding an event handler hook instead of setting onclick explicitly would probably fix this...