【问题标题】:Use a parameter value in a callback function在回调函数中使用参数值
【发布时间】:2016-08-15 17:19:31
【问题描述】:

我在使用回调函数中的参数值触发“touchmove”事件时遇到问题。如果我通过“警报”而不是功能,我会成功。示例中的基本概念是当文本框在选定的 div (ID="myDIV") 内滚动时,文本框在 'touchmove' 上增加“1”(obj.number)。

这是一个例子:

function myFunction(num) {
  document.getElementById("divText").innerHTML = x += num;
}

function Scroller(area, obj) {
  $divarea = document.getElementById(area);
  $divarea.addEventListener("touchstart", function() {
    obj.alertMe(obj.number); // THIS WORKS
  });

  $divarea.addEventListener("touchmove", function() {
    obj.scrollMe(obj.number) // THIS DOES NOT WORK AND WHAT I NEED TO RUN, "obj.number" SHOULD BE 1
  });

  var x = 0;
}

$scroll = new Scroller("myDIV", {
  number: 1,
  alertMe: function(numberValue) {
    alert(numberValue)
  },
  scrollMe: function(numberValue) {
    myFunction(numberValue)
  }
})

正文只是基本的 HTML:

<div id="myDIV" >
    <!-- a bunch of text goes here so that it scrolls -->
</div>

<div id="divText" ></div>

非常感谢溢出社区帮助我发现我的错误,因为我已经花了太多时间在我知道(希望)将是一个简单的解决方案上。

谢谢!

【问题讨论】:

  • 工作正常...x 未定义..
  • 稍微好一点的演示:jsfiddle.net/rayon_1990/fawv25xe
  • x 是一个局部变量 mate!无法从函数中访问!
  • 并删除alert(不要用于调试),它将中断从touchstarttouchmove的流程
  • Rayon Dabre,你说得对,“x”被写成一个局部变量。该功能现在可以根据需要工作。非常感谢!

标签: javascript jquery function callback parameter-passing


【解决方案1】:

将 x 初始化为全局变量,这将解决您的问题

function Scroller(area, obj) {
  $divarea = document.getElementById(area);
  $divarea.addEventListener("touchstart", function() {
    obj.alertMe(obj.number); // THIS WORKS
  });

  $divarea.addEventListener("touchmove", function() {
    obj.scrollMe(obj.number) // THIS DOES NOT WORK AND WHAT I NEED TO RUN, "obj.number" SHOULD BE 1
  });

  x = 0;
}

【讨论】:

  • 感谢@S Vinesh,“x”是一个局部变量导致了这个问题。
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2019-09-10
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多