如何使用具有参数的另一个函数调用带有参数的函数?

时间:2015-01-07 16:12:57

标签: javascript jquery d3.js

我正在使用D3和JS。

我有一个创建按钮的功能,其中一个参数是onClick,它在点击按钮时运行(显然)。

例如:

simpleButton(imageURL, width, height, title, onClick){
.attr("xlink:href", imageUrl) //-original image
    .attr( "width", width) //-icon width
    .attr( "height", height) //-icon height
    .on("click", onClick)
    .append("svg:title")
    .text(title); //-give the button a title
}

现在我的一个按钮用于隐藏某些形状(即设置visibility:hidden)。

所以我创建了另一个隐藏选择的函数,例如:

hideSelection(selection){
    selection.classed("hidden", true);
}

此函数接受一个参数,以便我可以通过我想要隐藏的内容。

因此,例如我认为可行的工作如下:

simpleButton("\images\dog", 100, 100, "dog", hideSelection(dog));

现在,这确实有效,但是在没有我点击的情况下它可以直接使用。我知道这是因为我因为括号 - ()而直接调用hideSelection

但我的问题是,如何在运行时立即停止调用此功能?如何通过另一个具有参数的函数运行带参数的函数(如果这有任何意义的话)?

2 个答案:

答案 0 :(得分:2)

你应该把它包装在一个匿名函数中:

simpleButton("\images\dog",100,100, "dog", function() {
  hideSelection(dog)
});

此函数可以访问dog变量,因为它是closure - 在创建父作用域时可以访问父作用域的函数。

答案 1 :(得分:2)

您确实立即调用hideSelection(dog)并将结果传递给simpleButton - 您需要将引用传递给函数。最简单的方法是将其包装在另一个函数中:

simpleButton("\\images\\dog", 100, 100, "dog", function() {
    hideSelection(dog)
});

(P.S.你可能想要逃避图像路径中的\