jQuery BBQ - Execute events in injected Javascript as if with document.ready
I've successfully implemented jQuery BBQ on an HTML page which allows me to inject HTML into a div when trigger links with a certain class are clicked. What I'd like to do is execute some jquery which is included within the injected page as if document.ready had been triggered by the injection.
I'm using jQuery 1.4.4 so would prefer to avoid LiveQuery.
Here is my attempt so far:-
// Global Join Functions
$(window).bind( 'hashchange', function() {
// ==================================================================
// Progressively enhance Radio Buttons and Checkboxes
// ==================================================================
$(".enhancedradiocheck").buttonset();
// ==================================================================
// Ajaxify links and load them in a div whilst hashing state
// ==================================================================
// Keep a mapping of url-to-container for caching purposes.
var cache = {
// If url is '' (no fragment), display this div's content.
'': $('.form-default')
};
// Bind an event to window.onhashchange that, when the history state changes,
// gets the url from the hash and displays either our cached content or fetches
// new content to be displayed.
$(window).bind('hashchange', function (e) {
// Get the hash (fragment) as a string, with any leading # removed. Note that
// in jQuery 1.4, you should use e.fragment instead of $.param.fragment().
var url = $.param.fragment();
// Remove .form-current class from any previously "current开发者_运维技巧" link(s).
$('a.form-current').removeClass('form-current');
// Hide any visible ajax content.
$('.ajaxified').children(':visible').hide();
if (cache[url]) {
// Since the element is already in the cache, it doesn't need to be
// created, so instead of creating it again, let's just show it!
cache[url].show();
} else {
// Show "loading" content while AJAX content loads.
$('.form-loading').show();
// Create container for this url's content and store a reference to it in
// the cache.
cache[url] = $('<div class="form-item"/>')
// Append the content container to the parent container.
.appendTo('.ajaxified')
// Load external content via AJAX. Note that in order to keep this
// example streamlined, only the content in .infobox is shown. You'll
// want to change this based on your needs.
.load(url, function () {
// Content loaded, hide "loading" content.
$('.form-loading').hide();
});
}
})
// Since the event is only triggered when the hash changes, we need to trigger
// the event now, to handle the hash the page may have loaded with.
$(window).trigger('hashchange');
//Add the hash to any link with the class ajaxlink so it degrades gracefully
$("a.ajaxlink").each(function () {
el = $(this);
ajaxhref = "#" + el.attr("href");
el.attr("href", ajaxhref);
})
});
I managed to find a solution - Essentially you can insert anything you want to be triggered by the AJAX injection underneath the AJAX call in the original script as follows:-
.load(url, function () {
// Content loaded, hide "loading" content.
$('.form-loading').hide();
$(".enhancedradiocheck").buttonset();
});
精彩评论