2015-09-13 7 views
-1

Метатег находится в начале страницы, а javascript - после jQuery в конце документа. Когда я запускаю код из консоли Chrome, он отлично работает, и sortList устанавливается в [[0,0]] так же, как я ожидаю, но когда он запускается на странице, я получаю исключение в консоли. Uncaught TypeError: Cannot use 'in' operator to search for 'date' in undefined(anonymous function)Javascript работает только после загрузки страницы

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') 
       }); 
      }); 
     }); 
}); 
+0

, конечно, это работает только после загрузки страницы :) попробуйте 'window.onload = yourFunction;' – webduvet

+0

для получения стабильных результатов, сделать это в jqueery документе готовый блок –

+0

@JaromandaX: Нет, если jQuery находится в конце документа (что говорит OP), нет необходимости в 'ready'. –

ответ

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, sortCodes является undefined.

То, что вы, вероятно, хотел был:

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]]; 
} 
+0

Хорошо, значит, это мягкая вкладка или проблема с жесткой вкладкой? –

+0

@XO: JavaScript не заботится о мягких и жестких вкладках. Это еще один пример того, как не всегда использовать блоки после того, как контрольные утверждения могут укусить вас и тратить ваше время. –

+0

Javascript не делает, но мой редактор делает, и это объясняет, почему он показывает, что он правильно встроен, и все же это не так. Я собираюсь добавить контрольные утверждения. –

Смежные вопросы