Thanks Diego,  I'll try this out.  However, for this specific case
this may not be a good solution for us because we want to allow the
mousedown event to bubble up.

On Feb 13, 9:10 pm, Diego Perini <[email protected]> wrote:
> Scott,
> if I recall correctly, the solution to this maybe in the way the click
> event works.
>
>   click = mousedown + mouseup
>
> if you setup three handlers, one for each of the above events you
> should see them fire in this order:
>
>    mousedown - mouseup - click
>
> Don't use the alert() to show them they may appear in the wrong order,
> use top.status...
>
> Now (to cover different browsers) insert these lines in the "mouseup"
> handler:
>
>    event.stopPropagation();
>    event.preventDefault();
>
>    event.cancelBubble = true;
>    event.returnValue = false;
>
>    return false;
>
> The "click" event shouldn't happen then.
>
> One or more of the above lines shouldn't be necessary but while
> testing you can leave them all, I really can't remember very well in
> this moment...I suggest you try this first with native methods on FF
> and see the result compared with those you can get with jQuery.
>
> Let me know if I did understand your problem correctly. The above
> seemed weird to me at first but there are reasons to it, so a quick
> test will hopefully take you out of doubts...or put more on me... :-)
>
> Diego
>
> On 13 Feb, 22:14, Scott González <[email protected]> wrote:
>
> > Not being able to guarantee the order does make this tricky.  At least
> > for now, I'm just looking for something to improve our reliability in
> > UI, even if we don't provide this as a guaranteed method for putting
> > your handler at the top of the stack.
>
> > As for why we want to do this, we're modifying the defined behavior
> > that browsers provide.  The draggable plugin provides non-native
> > functionality and creates non-native events.  In addition to creating
> > new events, we believe that modifying the existing event system is
> > beneficial.  So if you mousedown and mouseup on a draggable element
> > without dragging, then you should get a click event and no drag
> > events.  However, if you do drag, you should get all of the drag
> > events (dragstart, drag, dragstop) and not get the click event, since
> > you performed a drag not a click.
>
> > Since we can't actually prevent the click event from being triggered,
> > the best we can do is cancel the click event as soon as it's
> > triggered.  While writing this last sentence I had an idea that we
> > could throw a transparent div over the draggable as soon as dragging
> > starts.  This would cause the mouseup to occur on a different element
> > than the mousedown and should prevent the click event altogether.
>
> > On Feb 13, 10:07 am, Brandon Aaron <[email protected]> wrote:
>
> > > Before we can answer that, we need to answer this question:
>
> > > Are we, as a library, guaranteeing the order of events as part of our API?
>
> > > The spec and browsers do not guarantee the order of events and our 
> > > ordering
> > > is more a side-affect of how we currently handle the events.
>
> > > Even with your bindFirst method you cannot guarantee that your event will 
> > > be
> > > the first when finally triggered. Why is the bindFirst method necessary? 
> > > Why
> > > don't you want other subscribers to know the event was triggered? 
> > > Shouldn't
> > > those subscribers be prepared to check if a particular change actually
> > > happened or not for some events?
>
> > > --
> > > Brandon Aaron
>
> > > On Fri, Feb 13, 2009 at 8:41 AM, Scott González 
> > > <[email protected]>wrote:
>
> > > > We have a few places in jQuery UI where we need to prevent events from
> > > > occurring, e.g., preventing the click event after a drag.  We've been
> > > > partially successful by just binding a handler and the click event and
> > > > returning false.  This can be improved by calling
> > > > event.stopImmediatePropagation(), but that won't prevent handlers bound
> > > > before ours from running.  The only solution I can come up with is to 
> > > > force
> > > > our handler to be the first handler.  With some help from Ariel, I've 
> > > > put
> > > > togheter some code (http://codedumper.com/oxewu) and I'm looking for
> > > > some feedback.  Is there some other way we can prevent event handlers 
> > > > from
> > > > running?  Are there still caveats like native onclick events?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to