[jsr-314-open] FYI: onchange for radio and checkbox
Dan Allen
dan.j.allen at gmail.com
Fri Aug 28 18:33:35 EDT 2009
On Mon, Aug 17, 2009 at 7:21 PM, Jim Driscoll <Jim.Driscoll at sun.com> wrote:
> On 8/17/09 1:25 PM, Ed Burns wrote:
>
>> On Wed, 12 Aug 2009 14:27:37 -0700, Jim Driscoll<Jim.Driscoll at Sun.COM>
>>>>>>> said:
>>>>>>>
>>>>>>
>> JD> So, in the interests of making all browsers behave similarly, I've
>> JD> changed the default behavior to onclick for those components.
>>
>> I agree with this modification. I didn't see anything in the
>> ChangeLog[1]. Can you add it, please, Jim.
>>
>
> It's not a spec change - the spec doesn't specify exactly what behavior
> happens for the default event. This is by (good) design.
>
> I don't think we should specify any of this in the spec, but merely try our
> best to actually reflect a "valueChanged" event - however that may be.
>
> Jim, I'd still like to see your answer to Dan Allen's question about,
>> "can we manually emulate the real, onchange behavior by doing some kind
>> of old/new comparison". However, I must say that I don't personally
>> think the extra logic is worth it.
>>
>
> There are other issues about this, which I've been trying to look at today.
> I'd delayed answering because my research on it isn't complete.
>
> As a partial summary of what I've found: blur() won't work - it messes
> with accessibility. blur() would need to be followed by focus() - and now
> it's getting really messy - imagine the escape handling you'd have to code
> in to not spuriously call a user supplied onfocus handler. Though in all
> honesty, that may be the cleanest solution - if we really want one.
>
>
> The component's value is already changed in the actual (click) event
> itself, so you can't do any testing there. You could cache the complete
> value list (in some sort of body onload method *shudder*), but that's
> probably a bad idea too - and would fail on programmatic change of the
> selected values anyway (which is alarmingly common) - though that also
> causes a simple onchange handler to also fail on some browsers.
>
> You could also set up a timer that periodically checked for value changes,
> executing on, say, a 50 ms interval. That seems like a lot of bother to get
> around seeing an extra click on a radio button - but I suppose that would
> work. Of course, you'd be writing a bunch of code out into the rendered
> page - and that code could be vulnerable if you're doing ajax updates of
> those values, so you'd have to route it through there. And then you'd be
> spawning new executable code in JavaScript on a timer - probably one for
> each radio set, unless you really want to get fancy. I shudder to think of
> what that would do to an IE6 client on a slow machine, if they hit a page
> with a fair number of radio buttons.
>
> So, in short, no, it appears we can't (easily) fix this. It's broken.
> The best option will probably be to have slightly inconsistent behavior,
> that's at least *predictably* inconsistent in all environments. (I.e. -
> you'll get onclick behavior for things, and onchange behavior for others)
> Remember, onclick behavior is just fine for checkboxes - every check changes
> state anyway. So we're really just talking about radio buttons. Where
> submitting twice would matter - that's starting to sound pretty much list a
> vague edge case.
>
> SO it seems like we're stuck with what we currently have - it's minorly
> flawed, but not as flawed as every other way I can think of doing it.
Thanks for doing this research Jim. If nothing else, you should preserve
this in an FAQ.
It reminds me how pathetic HTML/JavaScript is after all of these years (or
perhaps just IE). You'd think that this stuff would have been fixed by now.
If JSF can't solve the problem in a simple way, then perhaps would should
just say it isn't JSF's concern. I suppose third party frameworks can put in
all the interval checking they want.
-Dan
--
Dan Allen
Senior Software Engineer, Red Hat | Author of Seam in Action
Registered Linux User #231597
http://mojavelinux.com
http://mojavelinux.com/seaminaction
http://in.relation.to/Bloggers/Dan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jsr-314-open-mirror/attachments/20090828/d5f2b997/attachment.html
More information about the jsr-314-open-mirror
mailing list