jquery change event callback
Asked Answered
Y

3

10

How to call a function once after change() event complete?

for example, something like this: ( I know jQuery Doesn't have callback method as default )

$('#element').change( function(){
                     // do something on change
                     // $('#milestonesSelect').multiselect({ minWidth: 120 , height : '200px' ,selectedList: 4  }).multiselectfilter();
                      // some animation calls ...
                      // ...
                     }, function(){
                     // do something after complete
                      alert('another codes has completed when i called');
                     }
                   );

Is it possible to call a single callback after all the codes on change method done, except call a complete callback for every functions on it?

I need to do something after the change event has completed

Shall I need to set order to methods in change handler?

Yim answered 4/4, 2013 at 7:26 Comment(3)
Just run your code inside that change event. There's no callback needed.Plow
By 'do something after complete' do you mean once the first function has finished, or after the change event has completed?Agamogenesis
after the change event has completedYim
E
11

You can probably make use of event bubbling and register a callback in the document.

$(document).on('change', '#element', function(){
    console.log('after all callbacks')
});

Demo: Fiddle

Eddieeddina answered 4/4, 2013 at 8:6 Comment(2)
And what if your events are already triggered in this way? ie. jQuery('#myelement').on('change', 'select,input', function(){ ... do stuff }); How would you attach a callback after these changes are triggered?Fao
event bubbling link is not working in your answer. Please update for later use.Lehr
L
2

I just spent some time exploring this myself, and decided to submit my answer to this question as well. This is not utilizing any of jQuery's deferred methods, which might be a better approach. I haven't explored them enough to have an opinion on the matter.

$("#element").change(function() {
  handler().after(callBack($("#element").val()));
}

function handler() {
  alert("Event handler");
}

function callBack(foo) {
  alert(foo);
}

Demo: JSFiddle

Lazaretto answered 28/1, 2014 at 23:15 Comment(1)
handler().after() is undefinedDictaphone
D
0

If I understand your question correctly, this will execute code only one time after a change event is fired:

var changed = false;

$('#element').on('change', function() {
    if ( !changed ) {
        // do something on change
        changed = true;
    }
  }
});
Diatropism answered 4/4, 2013 at 7:30 Comment(1)
as you said this will execute code only one time after a change event is fired but I need to do something after event completed not fired. I don't want to do it at the same time with another executionsYim

© 2022 - 2024 — McMap. All rights reserved.