jQuery BBQ - выполняет события во внедренном Javascript, как будто с document.ready - PullRequest
1 голос
/ 10 марта 2011

Я успешно реализовал jQuery BBQ на странице HTML, которая позволяет мне вставлять HTML в div при нажатии на ссылки триггера с определенным классом.То, что я хотел бы сделать, это выполнить некоторый jquery, который включен во вставленную страницу, как будто document.ready был вызван инъекцией.

Я использую jQuery 1.4.4, поэтому предпочел бы избежать LiveQuery.

Вот моя попытка: -

// 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);
    })
});

1 Ответ

1 голос
/ 10 марта 2011

Мне удалось найти решение. По сути, вы можете вставить все, что хотите, чтобы запускаться с помощью AJAX-инъекции, под вызовом AJAX в исходном скрипте следующим образом: -

.load(url, function () {
                // Content loaded, hide "loading" content.
                $('.form-loading').hide();
                 $(".enhancedradiocheck").buttonset();


            });
...