未捕获的语法错误:意外的if标记

4
我创建了WordPress短代码选项卡并编写了以下代码,用于收集短代码:
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.

如何修复它?


1
从var定义链中删除此 shortcode += '[tap ';。否则,您会再次定义它,并且没有值可添加。 - Sergio
2个回答

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 ';

阅读:
关于作用域
关于var


3

这里出现了问题

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

shortcode已经是在上面定义过的变量。你不能在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)的东西。这将在给定的.tapForm范围内查找相关的.Content输入。

我认为可以尝试这样做,但这只是一个想法。

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

1
我认为你应该强调第二个逗号必须替换为分号。仅仅通过查看代码可能不太明显。 - Felix Kling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接