4

我创建 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.

如何解决?

4

2 回答 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

于 2013-08-26T20:16:05.463 回答
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()or的东西$('.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]');  
});
于 2013-08-26T20:13:32.797 回答