tinymce按钮内的JavaScript循环

时间:2019-05-18 16:42:04

标签: javascript arrays tinymce

我的JavaScript循环在tinymce按钮内无法正常工作。

我设置了一个变量n,它是我从html输入获得的数组大小。

var n = $('#total').val();

然后,我创建一个tinymce按钮数组:var menuItems = [];

在我的tinymce编辑器初始化中,创建按钮:

editor.on('init', function (e) {

        for (var i=1; i<=n; i++){
            var obj = {
                text: 'Item ' + i,
                onclick: function() {
                    var msg = '&nbsp;<strong>#item' + i + '#</strong>&nbsp;';
                    editor.insertContent(msg);
                }
            }
            menuItems.push(obj);
        }
    });

最后一步是将menuItems添加到tinymce按钮:

editor.addButton('myButton', {
        type: 'menubutton',
        text: 'Items',
        icon: false,
        menu: menuItems 
    });

按钮显示正确,带有正确的标签。我有按钮:

项目1 项目2 项目3

但是,无论单击哪个按钮,编辑器中显示的文本均为item3。它总是得到最后一个按钮的文本。 有人知道为什么会这样吗?

谢谢

1 个答案:

答案 0 :(得分:1)

使用let代替var,因为let将保留其词法块作用域,而var不会:

editor.on('init', function(e) {
  for (let i = 1; i <= n; i++) {  // <-- use let here
    var obj = {
      text: 'Item ' + i,
      onclick: function() {
        var msg = '&nbsp;<strong>#item' + i + '#</strong>&nbsp;';
        editor.insertContent(msg);
      }
    }
    menuItems.push(obj);
  }
});

这里是documentation on let