【问题标题】:how to pass variables to event listener method in d3如何将变量传递给d3中的事件监听器方法
【发布时间】:2014-02-06 18:33:25
【问题描述】:

我正在使用 d3svgAngularJS

我已经编写了一些代码来使用 d3 处理 svg 元素上的 mouseup 事件。代码如下:

<svg>
    <!-- some other code-->
</svg>

function myFunction() {
    var isMouseUp = false;
    d3.select("svg").on("mouseup", func1);
}

function func1() {
    isMouseUp = true;
}

如您所见,isMouseUpmyFunction() 的局部变量。 我必须将它传递给func1()。我该怎么做?

附:我无法将isMouseUp 设为全局。我也不能将func1() 本地化为myFunction()

【问题讨论】:

  • 你必须声明isMouseUp outside of any function for it to be accessible in func1()`。在您的示例中,您不需要通过函数调用发送它。
  • @RoySchoep 感谢您的回复,但如果我将变量置于函数之外,它将成为全局变量,由于某些历史原因,我无法这样做。有什么办法可以让我在调用func1()时传递变量吗?
  • 这可能是可能的,但这不会解决您的示例中的任何问题。您无法更改 func1() 中 isMouseUp 的值,因为它在 myFunction() 的范围内,如果您必须在多个函数中操作变量,您肯定需要一个全局变量。
  • @RoySchoep 是的,我遇到了你谈到的问题。在那种情况下,我所做的是我获取了一个 JSON 对象,并且我获取了变量。为了问题的简单,我没有提到它。
  • 你可以让func1的内联函数d3.select("svg").on("mouseup", function(isMouseUp){ func1(isMouseUp);} );func1()看起来像function func1(isMouseUp){}

标签: javascript angularjs svg d3.js


【解决方案1】:

您可以通过在另一个函数中包装对 func1 的调用来做到这一点:

function myFunction() {
   var isMouseUp = false;
   d3.select("svg").on("mouseup", function() { func1(isMouseUp); });
}

function func1(isMouseUp) {
   isMouseUp = true;
}

演示here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2012-05-04
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多