Javascript仅在加载页面后才有效

时间:2015-09-13 08:52:16

标签: javascript jquery

元标记位于页面的头部,javascript位于文档末尾的jQuery之后。当我从Chrome的控制台运行代码时,它工作正常,sortList设置为[[0,0]]正如我所期望的那样,但当它在页面上运行时,我在控制台中得到一个异常。 Uncaught TypeError: Cannot use 'in' operator to search for 'date' in undefined(anonymous function)

HTML

<meta data-var="sickbeard.COMING_EPS_SORT" data-content="date">

的Javascript

$(document).ready(function(){
    if($('meta[data-var="sickbeard.COMING_EPS_LAYOUT"]').data('content') == 'list')
        var sortCodes = {'date': 0, 'show': 1, 'network': 4};
        var sort = $('meta[data-var="sickbeard.COMING_EPS_SORT"]').data('content');
        var sortList = (sort in sortCodes) ? [[sortCodes[sort], 0]] : [[0, 0]]; 

    if($('meta[data-var="sickbeard.COMING_EPS_LAYOUT"]').data('content') == 'banner' || $('meta[data-var="sickbeard.COMING_EPS_LAYOUT"]').data('content') == 'poster')
        $('#sbRoot').ajaxEpSearch({'size': 16, 'loadingImage': 'loading16' + themeSpinner + '.gif'});
        $('.ep_summary').hide();
        $('.ep_summaryTrigger').click(function() {
            $(this).next('.ep_summary').slideToggle('normal', function() {
                $(this).prev('.ep_summaryTrigger').attr('src', function(i, src) {
                    return $(this).next('.ep_summary').is(':visible') ? src.replace('plus','minus') : src.replace('minus','plus')
                });
            });
        });
});

1 个答案:

答案 0 :(得分:3)

问题是您错过了if上的某个区块,并且您的缩进对您不利:

$(document).ready(function(){
    // MISSING { HERE --------------------------------------------------------------v
    if($('meta[data-var="sickbeard.COMING_EPS_LAYOUT"]').data('content') == 'list')
        var sortCodes = {'date': 0, 'show': 1, 'network': 4};
        var sort = $('meta[data-var="sickbeard.COMING_EPS_SORT"]').data('content');
        var sortList = (sort in sortCodes) ? [[sortCodes[sort], 0]] : [[0, 0]]; 

    if($('meta[data-var="sickbeard.COMING_EPS_LAYOUT"]').data('content') == 'banner' || $('meta[data-var="sickbeard.COMING_EPS_LAYOUT"]').data('content') == 'poster')
        $('#sbRoot').ajaxEpSearch({'size': 16, 'loadingImage': 'loading16' + themeSpinner + '.gif'});
        $('.ep_summary').hide();
        $('.ep_summaryTrigger').click(function() {
            $(this).next('.ep_summary').slideToggle('normal', function() {
                $(this).prev('.ep_summaryTrigger').attr('src', function(i, src) {
                    return $(this).next('.ep_summary').is(':visible') ? src.replace('plus','minus') : src.replace('minus','plus')
                });
            });
        });
});

因此,如果if条件为真,则仅适用以下行。你真正拥有的是:

if($('meta[data-var="sickbeard.COMING_EPS_LAYOUT"]').data('content') == 'list')
    var sortCodes = {'date': 0, 'show': 1, 'network': 4};
var sort = $('meta[data-var="sickbeard.COMING_EPS_SORT"]').data('content');
var sortList = (sort in sortCodes) ? [[sortCodes[sort], 0]] : [[0, 0]]; 

因此,如果if条件为false,则sortCodesundefined

你可能想要的是:

if($('meta[data-var="sickbeard.COMING_EPS_LAYOUT"]').data('content') == 'list') {
    var sortCodes = {'date': 0, 'show': 1, 'network': 4};
    var sort = $('meta[data-var="sickbeard.COMING_EPS_SORT"]').data('content');
    var sortList = (sort in sortCodes) ? [[sortCodes[sort], 0]] : [[0, 0]]; 
}