如何在一个ajax函数完成之前加载jquery函数

时间:2014-05-25 11:54:08

标签: javascript jquery ajax

如何在上一个函数完成其功能之前触发一个事件?

我有以下AJAX代码:

var BrainyFilter = {
    //...
    init: function (opts) {},
    changeTotalNumbers: function (data) {
        jQuery(BrainyFilter.filterFormId).find('.bf-count').remove();
        jQuery(BrainyFilter.filterFormId).find('option span').remove();
        jQuery(BrainyFilter.filterFormId).find('select').removeAttr('disabled');
        jQuery('.bf-attr-filter').not('#bf-price-container').find('input, option')
            .attr('disabled', 'disabled')
            .parents('.bf-attr-filter')
            .addClass('bf-disabled');

        if (data && data.length) {
            for (var i = 0; i < data.length; i++) {
                jQuery('.bf-attr-' + data[i].id + ' .bf-attr-val').each(function (ii, v) {
                    if (jQuery(v).text() == data[i].val) {
                        var parent = jQuery(v).parents('.bf-attr-filter').eq(0);
                        var isOption = jQuery(v).prop('tagName') == 'OPTION';
                        var selected = false;
                        if (isOption) {
                            jQuery(v).removeAttr('disabled');
                            selected = jQuery(v)[0].selected;
                        } else {
                            parent.find('input').removeAttr('disabled');
                            selected = parent.find('input')[0].checked;
                        }
                        parent.removeClass('bf-disabled');
                        if (!selected) {
                            if (!isOption) {
                                parent.find('.bf-cell').last().append('<span class="bf-count">' + data[i].c + '</span>');
                            } else {
                                jQuery(v).append('<span> (' + data[i].c + ')</span>');
                            }
                        }
                    }
                });
            }
            jQuery('.bf-attr-filter input[type=checkbox]').filter(':checked')
                .parents('.bf-attr-block').find('.bf-count').each(function (i, v) {
                var t = '+' + jQuery(v).text();
                jQuery(v).text(t);
            });
            // since opencart standard filters use logical OR, all the filter groups
            // should have '+' if any filter was selected
            if (jQuery('.bf-opencart-filters input[type=checkbox]:checked').size()) {
                jQuery('.bf-opencart-filters .bf-count').each(function (i, v) {
                    var t = '+' + jQuery(v).text().replace('+', '');
                    jQuery(v).text(t);
                });
            }
        }

        // disable select box if it hasn't any active option
        jQuery(BrainyFilter.filterFormId).find('select').each(function (i, v) {
            if (jQuery(v).find('option').not('.bf-default,[disabled]').size() == 0) {
                jQuery(v).attr('disabled', 'true');
            }
        });
    },
    //...
} // close the BrainyFilter

我还运行了另一个jQuery文件,以使用$('.bf-count').text()获取bf-count值。 页面加载时,bf-count值为空。由于上面的代码注入bf-count,我需要等到它完成for循环才能获得bf-count值。

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

在不知道如何加载第二个js文件的情况下,我只能给你一个猜测建议。

如果要在页面完全加载后运行第二个js文件代码,可以将代码包装在:

jQuery(window).load(function(){
    //your code here. runs after the page is fully loaded 
});

jQuery文档:http://api.jquery.com/load-event/

&#34;当加载事件和所有子元素已完全加载时,会将事件发送到元素。此事件可以发送到与URL关联的任何元素:图像,脚本,框架,iframe和窗口对象。&#34;