Javascript 元素列表后缺少“]
我正在使用我在web上获得的类似咆哮的jquery脚本,该脚本具有以下内容:Javascript 元素列表后缺少“],javascript,jquery,Javascript,Jquery,我正在使用我在web上获得的类似咆哮的jquery脚本,该脚本具有以下内容: template: function (title, message) { var e; e = [ '<div>', '<div class="background">', '<div class="content">', '<h2>
template: function (title, message) {
var e;
e = [
'<div>',
'<div class="background">',
'<div class="content">',
'<h2>' + title + '</h2>',
'<p>' + message + '</p>',
'</div>',
'</div>',
'<span class="icon"></span>',
'<span class="close"></span>',
'</div>'
].join("");
return e;
}
模板:功能(标题、消息){
变量e;
e=[
'',
'',
'',
''+标题+'',
“”+消息+”“,
'',
'',
'',
'',
''
].加入(“”);
返回e;
}
它在别处被“this.element=$(this.options.template(title,message));”调用
我得到了“元素列表后缺少]”错误,但列表似乎以“]”关闭
更新 与分号相关的建议解决方案不起作用。因此,也许这是一些人所说的其他事情 我已经粘贴了js文件 顺便说一句,我们看到了预期的效果,而且一直如此。只是FireFox中的Firebug以及Safari和Chrome中的Web Inspector都显示了与此相关的四个错误 可能与此相关的是,在仔细观察时,我注意到直到第86行上的“self.flash(“end”);”被触发,错误才会出现 也许非常贴切的一点是,整个flash是我添加到原始代码中的一个黑客
更新2 感谢下面的回答和评论,特别是“我不是”的回答和评论,我已经前进了一点,但仍然需要一些帮助才能越过终点线 如果您参考我之前的更新和粘贴箱,那么问题似乎与“flash”功能有关。我已按如下所示对此进行了更新:
flash: function (mode) {
var self, delay, trailerDelay, interval, iterations, fadeMe;
if (mode == "start") {
trailerDelay = 5;
interval = this.options.startFlashInterval;
iterations = this.options.startFlashTimes * 2;
delay = this.options.startFlashDelay + interval;
} else {
trailerDelay = this.options.endFlashDelay;
interval = this.options.endFlashInterval;
iterations = this.options.endFlashTimes * 2;
delay = 5;
}
if (iterations < 2) {
iterations = 2;
}
self = this;
fadeMe = function () {
self.element.animate({opacity: 'toggle'}, {duration: interval})
};
setTimeout(fadeMe, delay);
setTimeout(fadeMe, interval);
for(var i = 2; i < iterations; i++) {
setTimeout(fadeMe, interval);
}
setTimeout(function() {var x = 1}, trailerDelay);
},
flash:功能(模式){
var self、延迟、跟踪延迟、间隔、迭代、fadeMe;
如果(模式==“开始”){
跟踪延迟=5;
间隔=this.options.startFlashInterval;
迭代次数=this.options.startFlashTimes*2;
延迟=this.options.startFlashDelay+间隔;
}否则{
trailerDelay=this.options.endFlashDelay;
间隔=this.options.endFlashInterval;
迭代次数=this.options.endFlashTimes*2;
延迟=5;
}
如果(迭代次数<2){
迭代次数=2次;
}
self=这个;
fadeMe=函数(){
self.element.animate({opacity:'toggle'},{duration:interval})
};
设置超时(fadeMe,延迟);
设置超时(fadeMe,间隔);
对于(变量i=2;i
然而,虽然这消除了错误,我也没有得到闪烁效果。基本上,fadeMe功能没有效果。我知道当警报出现时,它会被调用。我尝试过各种配置,结果都是一样的。我会很感激你的关注
已解决 需要一个单独的函数来处理setTimeout调用正在执行的操作
toggle: function (interval, delay) {
setTimeout(function() {}, delay);
this.element.animate({opacity: 'toggle'}, {duration: interval});
},
flash: function (mode) {
var delay, trailerDelay, interval, iterations, i;
if (mode == "start") {
trailerDelay = 5;
interval = this.options.startFlashInterval;
iterations = this.options.startFlashTimes * 2;
delay = this.options.startFlashDelay + interval;
} else {
trailerDelay = this.options.endFlashDelay;
interval = this.options.endFlashInterval;
iterations = this.options.endFlashTimes * 2;
delay = 5;
}
if (iterations < 2) {
iterations = 2;
}
this.toggle(interval, delay);
for(i = 1; i < iterations; i++) {
this.toggle(interval, interval);
}
setTimeout(function() {}, trailerDelay);
},
切换:功能(间隔、延迟){
setTimeout(函数(){},延迟);
animate({opacity:'toggle'},{duration:interval});
},
闪光:功能(模式){
var延迟,trailerDelay,间隔,迭代,i;
如果(模式==“开始”){
跟踪延迟=5;
间隔=this.options.startFlashInterval;
迭代次数=this.options.startFlashTimes*2;
延迟=this.options.startFlashDelay+间隔;
}否则{
trailerDelay=this.options.endFlashDelay;
间隔=this.options.endFlashInterval;
迭代次数=this.options.endFlashTimes*2;
延迟=5;
}
如果(迭代次数<2){
迭代次数=2次;
}
切换(间隔、延迟);
对于(i=1;i
接受了“我不是”的回答。你试过了吗
template: function (title, message) {
var e;
e = ['<div>',
'<div class="background">',
'<div class="content">',
'<h2>' + title + '</h2>',
'<p>' + message + '</p>',
'</div>',
'</div>',
'<span class="icon"></span>',
'<span class="close"></span>',
'</div>'].join("");
return e;
}
模板:功能(标题、消息){
变量e;
e=['',
'',
'',
''+标题+'',
“”+消息+”“,
'',
'',
'',
'',
'')。加入(“”);
返回e;
}
尝试识别该结构中的错误源
试一试
e=[
''
].加入(“”);
然后在[]内添加行,直到错误重现
我怀疑原因可能是标题或消息。js引擎会自动插入分号
代码>。因此,如果您尝试以下方法,它应该会起作用
e = ['<div>',
'<div class="background">',
'<div class="content">',
'<h2>' + title + '</h2>',
'<p>' + message + '</p>',
'</div>',
'</div>',
'<span class="icon"></span>',
'<span class="close"></span>',
'</div>'].join("");
将返回正确的值,在本例中为5
,但如果您按如下方式修改此函数
function myFunction()
{
return
5;
}
将返回undefine
,而不是返回值5
(大多数其他语言都不是这种情况),因为前面的函数对应于下面的函数
function myFunction()
{
return 5;
}
function myFunction()
{
return;
5;
}
一个return
语句后跟一个新行,告诉JS解释器应该在return
之后插入分号。但是,如果按如下方式修改函数,它将返回正确的值,即5
function myFunction()
{
return(
5);
}
因为在这里我们开始了一个表达式,带有一个开放的括号<代码>(< /代码>)。JS知道当我们找到新的行时,我们处于表达式的中间,并且足够聪明,在这种情况下不插入任何半个冒号。
< P>:
template: function (title, message) {
var e;
e = [
'<div>',
'<div class="background">',
'<div class="content">',
'<h2>' + title + '</h2>',
'<p>' + message + '</p>',
'</div>',
'</div>',
'<span class="icon"></span>',
'<span class="close"></span>',
'</div>'
];
e = e.join("");
return e;
}
模板:功能(标题、消息){
变量e;
e=[
'',
'',
'',
''+标题+'',
“”+消息+”“,
'',
'',
'',
'',
''
];
e=e.join(“”);
返回e;
}
关于您的更新和导致错误的flash()
函数,我看到的一个问题是您似乎将jQuery
对象传递给setTimeout
而不是函数
function myFunction()
{
return 5;
}
function myFunction()
{
return;
5;
}
在粘贴箱的145-151
行中,您有
setTimeout(this.element.animate(this.options.hideStyle, {duration: interval}), delay);
setTimeout(this.element.animate(this.options.showStyle, {duration: interval}), interval);
for(var i = 0; i < iterations; i++) {
setTimeout(this.element.animate(this.options.hideStyle, {duration: interval}), interval);
setTimeout(this.element.animate(this.options.showStyle, {duration: interval}), interval);
}
你一定要笑