Is there a way to launch an event after html() has been fired? Such as:
$.post(\"ajax.php\", {data :data}, function(data){
$(\"#countries\").html(data, fu
This syntax may also be of interest to you:
$(selector).html(function(index,oldHTML){
alert("test");
return data;
});
Yes you can...
// create a reference to the old `.html()` function
var htmlOriginal = $.fn.html;
// redefine the `.html()` function to accept a callback
$.fn.html = function(html,callback){
// run the old `.html()` function with the first parameter
var ret = htmlOriginal.apply(this, arguments);
// run the callback (if it is defined)
if(typeof callback == "function"){
callback();
}
// make sure chaining is not broken
return ret;
}
// test it all works as expected (including chaining)
$("#mything").html("<div>My Thing</div>",function(){
console.log("Just did my thing");
}).css({color: 'red'})
However, like everyone else says, it is unnecessary as .html()
is synchronous, so you can just put your code following it rather than in a callback.
No but there is no reason you couldn't do this:
$.post("ajax.php", {data :data}, function(data){
$("#countries").html(data);
var id = $("#countries option:selected").attr("id");
getRegions(id);
});
html()
is a synchronous operation, not an event, and so it would not logically accept a callback.
Just put your code after it:
$('container').html(data);
alert('test');
You can include the javascript code in your html response. An inline example:
$("#content").html("hello\<script>\alert('hello');\</script\>");
would update the div and also execute the code.