Javascript 元素列表后缺少“]

Javascript 元素列表后缺少“],javascript,jquery,Javascript,Jquery,我正在使用我在web上获得的类似咆哮的jquery脚本,该脚本具有以下内容: template: function (title, message) { var e; e = [ '<div>', '<div class="background">', '<div class="content">', '<h2>

我正在使用我在web上获得的类似咆哮的jquery脚本,该脚本具有以下内容:

    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);
}
你一定要笑