i have got a little problem here. I have to trigger an event which contains $.post() to load a form and assign it to a DOM. After this is done, i have edit the fields of the form.
I tried:
$.when(function(){
$('#type_rank_field').trigger('change'); //calls the $.post() to load the form
})
.done(function(){
$('#quest_'+questions[i].split('|')[1]).children('option[value="'+questions[i].split('|')[0]+'"]').attr('selected',true);
});
Unfortunately this doesnt work and if i leave it just like that:
$('#type_rank_field').trigger('change');
$('#quest_'+questions[i].split('|')[1]).children('option[value="'+questions[i].split('|')[0]+'"]').attr('selected',true);
The change even looks like this:
$('#type_rank_field').live('change',function(){
var id = $(this).children('option:selected').attr('id');
var id_edited = get_id_from_id(id);
$.post('ajax/load_questions_of_rank.ajax.php',{id: id_edited},function(data){
//alert(data);
$('#rank_fields').html(data);
});
});
Then the form editation is executed before the form is properly loaded and attached to DOM. This might be a stupid question for JavaScript guys, but i am mainly a PHP guy so dont be cruel :-)
Thanks
Return the promise object from your event handler:
and then use
triggerHandler()
instead.Here's a simple example showing the functionality being used: http://jsfiddle.net/WQPXt/
Can separate out your
change
handler code? Something like this:Then instead of triggering the
change
you can just callhandleChange
passing a callback to execute when the AJAX call is complete:I think we have to add callback after posted
the trigger change will look like this
.live
has been deprecated in jQuery since v1.7, and has been removed in v1.9.You should replace it with
.on()
..on
has 2 signatures for binding elements, whereas.live
only had 1.If the element exists at the time you are binding, you do it like this:
You can even use the shorthand:
If the element does not exist at the time, or new ones will be added (which is what
.live
was normally used for), you need to use "event delegation":NOTE: You want to bind to the closest static element, not always
document
.In the meantime, the jQuery Migrate plugin can be used to restore the
.live()
functionality if you upgrade your jQuery to the newest version.