jQuery UI,JavaScript,param和(可能)关闭

时间:2012-02-15 22:18:05

标签: jquery-ui closures

这是我的JavaScript示例:

  function createButtons(idDialog, tab, fn, param) {
    var btns = new Array();
    for (var i = 0; i < tab.length; i++) {
      btns.push( {
        text: (tab[i]>0 ? '+':'')+tab[i],
        click: function(a) {
          console.log(fn);
          console.log(param);
          fn(param);
          $(this).dialog("close");
        }
      });
    };
    btns.push( {
      text: "Close",
      click: function() {
        $(this).dialog("close");
      }
    });
    $(idDialog).dialog('option', 'buttons', btns);
  }

params:fn是一个应该在我们点击按钮时调用的函数,而param是一个应该传递到该函数的参数。

当我使用此代码时,console.log(fn)undefinedconsole.log(param)undefined。它有点不记得那个参数。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

我已经让JoshNaro回答了问题,但他并没有这样做,他给出的解决方案完美无缺:

function createButtons(idDialog, tab, fn, param) {
    var btns = new Array();
    for (var i = 0; i < tab.length; i++) {
      btns.push( {
        text: (tab[i]>0 ? '+':'')+tab[i],
        click: function(a) {
          console.log(fn);
          console.log(param);
          fn(param);
          $(this).dialog("close");
        }
      });
    };
    btns.push( {
      text: "Close",
      click: function() {
        $(this).dialog("close");
      }
    });
    $(idDialog).dialog('option', 'buttons', btns);
  }


createButtons(
    "#Hello",
    ['Save', 'Load'],
    function(parameter) {
        alert(parameter);
    },
    'World'
);