未捕获的SyntaxError:意外的令牌if

时间:2013-08-26 20:11:02

标签: javascript jquery wordpress tinymce

我创建WordPress ShortCode选项卡并编写此代码以收集短代码

jQuery('body').on('click', '#tapSubmit',function(){
    var shortcode = '[tapWrap]';
    jQuery('.tapForm').each(function(){
        var title = jQuery('.Title').val(),
            content = jQuery('.Content').val(),
            shortcode += '[tap ';
        if(title){shortcode += 'title="'+title+'"';}
        shortcode += ']';
        if(content){shortcode += ''+content+'';}
        shortcode += '[/tap]';
    });
    shortcode += '[/tapWrap]';

    tinyMCE.activeEditor.execCommand('mceInsertContent', false, shortcode);
});

我收到此错误

Uncaught SyntaxError: Unexpected token if 

然后我尝试了http://jsfiddle.net/中的代码,我在包含此代码的行中出现了此错误

shortcode += '[tap ';
Expected an assignment or function call and instead saw an expression.

如何解决?

2 个答案:

答案 0 :(得分:4)

当你有

var title = jQuery('.Title').val(),
        content = jQuery('.Content').val(),
        shortcode += '[tap ';

您正在该链中定义新变量,但已定义shortcode,因此您要在此范围内创建新变量。作为新变量,您无法使用+=。无论如何,我想你只想用这个:

var title = jQuery('.Title').val(),
    content = jQuery('.Content').val(); // changed the last comma with semicolon
shortcode += '[tap ';

阅读:
关于scope
关于var

答案 1 :(得分:3)

问题就在这里

var title     = jQuery('.Title').val(),
    content   = jQuery('.Content').val(),
    shortcode += '[tap ';

shortcode已经是上面定义的var。您无法在+=表达式

中使用var

只需将其更改为

即可
var title     = jQuery('.Title').val(),
    content   = jQuery('.Content').val(); // note the semicolon here

shortcode += '[tap ';

我认为你也会遇到一些嵌套问题。我认为您正在寻找更像jQuery('.Content').val()$(this).find('.Content').val()的内容,而不是为循环的每次迭代调用$('.Content', this)。这将在给定.Content的范围内找到相关的.tapForm输入。

我在想这样的事情,但这只是一个想法

jQuery('body').on('click', '#tapSubmit', function(){

  function title(context) {
    var value = jQuery(".Title", context).val();
    return value ? 'title="' + value + '"' : '';
  }

  function content(context) {
    var value = jQuery(".Content", context).val();
    return value || '';
  }

  var taps = jQuery('.tapForm').map(function(){
    return '[tap ' + title(this) + ']' + content(this) + '[/tap]';
  }).join();

  tinyMCE.activeEditor.execCommand('mceInsertContent', false, '[tapWrap]' + taps + '[/tapWrap]');  
});