[Ur] event propagation
Adam Chlipala
adamc at csail.mit.edu
Sat May 9 10:25:33 EDT 2015
I attempted a little version-control archeology to remind myself why I
made event handlers stop propagation by default. I made the change in
September 2009, but, poking around mailing-list traffic at that time, I
don't see any discussion of the issue.
What does everyone think? What's the right default behavior for an
event handler on a tag? It would be possible to change all events to
[transaction bool] instead of [transaction unit], so that the return
value is given literally; but that sounds like awkwardness that doesn't
pay its way for most cases.
Since stopping propagation was made the default, someone contributed
built-functions [preventDefault] and [stopPropagation], which correspond
to methods by those names on JavaScript event objects, in at least some
popular browsers. Would it make sense to (1) have event handlers return
truthy values by default (I believe Julian's patch has this effect) and
(2) require calling [preventDefault] or [stopPropagation] to change the
behavior?
On 05/07/2015 09:38 AM, Julian Squires wrote:
> I tried to write something like the following:
>
> datatype s = A | B | C
>
> fun main () =
> s <- source A;
> return <xml><body><form>
> <radio{#Test}>
> <radioOption value="A" onclick={fn _ => set s A} />
> <radioOption value="B" onclick={fn _ => set s B} />
> <radioOption value="C" onclick={fn _ => set s C} />
> </radio>
> <dyn signal={v <- signal s;
> return <xml><div>{[case v of A => "A"
> | B => "B"
> | C => "C"]}</div></xml>} />
> </form></body></xml>
>
> Because the onclick event handler produced is hard-coded to return
> false, the radio buttons don't update correctly.
>
> I have applied the attached patch to my own installation to get around
> it, but I imagine this might break existing code. It seems like one
> would want more explicit control of the return value of the event
> handler.
More information about the Ur
mailing list