8
$("#accordion").accordion({
    change: function (event, ui) {
        alert('event have to be changed')
    },
    changestart: function (event, ui) {
       return false;
    }
});

Is it possible to cancel the change event?

apaul
  • 15,557
  • 8
  • 44
  • 76
Simbian
  • 18,275
  • 3
  • 15
  • 8

6 Answers6

4

I am not sure about change but for other events in jqueryui returning false cancels the event.

Martin Wawrusch
  • 780
  • 1
  • 5
  • 12
  • 2
    This works because return false is equivalent to calling `e.preventDefault();` and `e.stopPropagation();` – earl3s Oct 21 '16 at 06:08
3

stopPropagation() is the key to stopping a jQueryUI action from processing, but it must be interrupted BEFORE the changestart event. For example, when the header item is actually clicked.

If this is a header/content pair in your accordion:

<h3 class='noexpand'>This is a dummy header</h3>
<div>This is dummy content</div>

Then this will prevent the accordion from expanding the div when the header is clicked:

$("h3.noexpand").click(function(e) {
    e.stopPropagation();
});

See jquery accordion prevent bubbling / allow default link action.

Community
  • 1
  • 1
Dave
  • 4,330
  • 3
  • 21
  • 30
2

As Martin said you can return false. See a code sample below.

...
eventname: function( event, ui ) {
    // Add your code here
    ...

    return false;
}
THRIVE
  • 4,428
  • 2
  • 15
  • 12
1
event.preventDefault();
event.stopPropagate();
Ali Tarhini
  • 5,078
  • 6
  • 38
  • 63
0

Returning false does nothing, to cancel an event in jQueryUI you need to call preventDefault() on the event.

$("#accordion").accordion({
    changestart: function (event, ui) {
       event.preventDefault();
    }
});

This should work with all event methods, including autocomplete. Handy if you wish to include a few custom options in your autocomplete menu that you want someone to select but don't actually want to add to the input it is tied to. :)

  • "These handlers, therefore, may prevent the delegated handler from triggering by calling event.stopPropagation() or returning false." - http://api.jquery.com/event.stoppropagation/ – bitoiu Sep 04 '14 at 15:49
  • This actually doesn't work. It was my first thought too. – earl3s Oct 21 '16 at 05:55
0

What worked for me is calling:

function onChange(e, ui) {
    e.preventDefault();
    e.stopPropagation();
}

Returning false at the end of the function has the same affect because it's the equivalent of making those two function calls.

earl3s
  • 2,195
  • 1
  • 20
  • 23