Javascript仅在页面加载后工作
meta标记位于页面的头部,javascript位于文档末尾的jQuery之后。当我从Chrome的控制台运行代码时,它工作正常,sortList设置为[[0,0]],正如我预期的那样,但当它在页面上运行时,控制台中会出现异常。未捕获的TypeError:无法使用“in”运算符在未定义的函数中搜索“date” HTMLJavascript仅在页面加载后工作,javascript,jquery,Javascript,Jquery,meta标记位于页面的头部,javascript位于文档末尾的jQuery之后。当我从Chrome的控制台运行代码时,它工作正常,sortList设置为[[0,0]],正如我预期的那样,但当它在页面上运行时,控制台中会出现异常。未捕获的TypeError:无法使用“in”运算符在未定义的函数中搜索“date” HTML 问题是,if上缺少一个块,缩进是在欺骗你: $(document).ready(function(){ // MISSING { HERE ---------------
问题是,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,则sortCodes未定义
你可能想要的是:
当然,它只有在页面加载后才能工作:try window.onload=yourFunction;为了获得一致的结果,请在JQuery document ready区块中进行。恐怕您的问题中没有足够的信息供我们回答。您需要创建一个示例来演示问题,如果您可以在该环境中复制问题,最好使用堆栈片段,我应该向@T.J.Crowder指出,我复制了你在本例中的标准回答MCVE,这样我就不必每次都从“帮助”部分拼凑出一些东西:@Andy:我在speeddial上有三个,bookmarklet。以上是一次性的,但我打字很快-好吧,那么这是软标签和硬标签的问题了?@XO:JavaScript不关心软标签和硬标签。这是另一个例子,说明不总是在控制语句之后使用块会让你感到痛苦,浪费你的时间。Javascript不会,但我的编辑器会,这就解释了为什么它显示为正确的内联而不是。我现在要添加控制语句。
$(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($('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') == '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]];
}