【问题标题】:How to call a Javascript Function which is nested inside a forEach loop如何调用嵌套在 forEach 循环中的 Javascript 函数
【发布时间】:2020-02-14 20:49:18
【问题描述】:

我正在尝试修改一个用于添加输入标签的插件,该插件可用here

我在下面写了我的问题的简化版本。该插件在页面中搜索任何带有“tags-input”类的 HTML,并为每个找到的添加和删除标签的函数创建一堆函数。 只要检测到 keydown 事件,插件就会触发 addTag() 函数。

[].forEach.call(document.getElementsByClassName('tags-input'), function (el) {
  function addTag(str){
    //code here adds a tag with a certain string "str"
  }
});

addTag("some string"); //function not found!

我希望在选择Live Search的链接时,能够从Foreach循环中调用AddTag()函数。

但是,我尝试在循环中添加侦听器,因为来自实时搜索的链接是在页面加载后从数据库生成的,侦听器似乎没有拾取它们。

如何从我的实时搜索中调用 addTag() 函数?

类似的问题对这个特定问题没有帮助:

Call javascript inside foreach loop - 没有给出答案

call javascript function outside foreach loop - 据我所知不同的问题

【问题讨论】:

  • 不是 100% 它的目标是什么。所以你想创建一个可以触发的函数列表?
  • 在不修改插件代码的情况下是无法做到这一点的。我看到其中一些函数对它们之外的变量有副作用,但对于 forEach 回调是局部的。您不能调用这些函数,除非您修改该插件代码,并将这些函数公开给外部范围。
  • 我不是 100% 确定最终目标是什么。不可能创建多个具有相同名称的全局函数并调用一次。因此,您要做的就是将它们推送到某个数组并循环遍历它。但这与再次运行循环并调用代码没有什么不同。因此,也许您实际上可以解释您要解决的问题。
  • 一种可能且显而易见的方法是将这些函数存储在 forEach 范围之外的变量中。
  • 在不修改原代码的情况下,无法从循环外调用addTag函数。是否也不能将“tags-input”类添加到“实时搜索”元素中?

标签: javascript html function foreach


【解决方案1】:

像这样,不是吗?

我明白你想要做什么:但为了简单起见,我使用了一个字符串值列表来表示另一种可能的方法:

//  Why not create a list of functions which correspond to each list item?
var doSomeThingFuncList = [];

["Yes","No","Maybe"].forEach(function (item) {
  // Assuming that we will create a function for each list item that must be called outside of the loop
  doSomeThingFuncList.push(
    () => {
      alert("Do Something");
    }
  );
});
// The functions we have defined inside the for-loop can now be called from outside the forEach loop through indexing the function list defined at the beginning

doSomeThingFuncList[0]();

基本上,知道什么函数运行数组的哪个索引,您就可以通过这些按钮上的事件回调这些函数。但我不确定这背后的场景是什么。

【讨论】:

  • 我很高兴能帮助理查德。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多