【问题标题】:Jquery .map Click Event on specific Element特定元素上的 Jquery .map 点击事件
【发布时间】:2020-07-29 11:14:45
【问题描述】:

你好, 我有一个这样的数组:

let Array1 = [
    {name:"try1", id:"id1", symbol:"symbol1"},
    {name:"try2", id:"id2", symbol:"symbol2"},
    {name:"try3", id:"id3", symbol:"symbol3"},
    {name:"try4", id:"id4", symbol:"symbol4"},
    {name:"try5", id:"id5", symbol:"symbol5"}
]

我想让它们中的每一个都成为一个按钮。我可以点击每一个。 为此,我使用 .map Funnction(我不确定这是最好的选择)

Array1.map(data => $(".check").html(`<a id="${data.id}" class="btn btn-info" href="#" role="button">${data.id}</a>`))

到目前为止,我得到了 5 个按钮。 1 按钮每个对象与按钮的 id。

问题从这里开始:我试图在此按钮上捕获单击事件。我做不到..

我试过了:

(`${data.id}`).click(e => console.log("click))

我很乐意寻求帮助或以任何其他方式获得相同的结果。谢谢!!

【问题讨论】:

  • (``)你用的选择器是什么?
  • ${data.id} 。在帖子中编辑
  • 不是在所有按钮上添加单独的单击事件侦听器,而是在所有按钮的父元素上添加单击事件侦听器并使用Event.target,您可以检查按钮是否被单击,还点击了哪个按钮。
  • 我使用 .map 函数(我不确定这是不是最好的选择)”。不,不是。您只需将其用作循环。在这种情况下使用.forEach.map() 仅在您将其结果分配给某物时才有用。 (let arr2 = arr.map(...))
  • 如果我解决了你的问题,你介意accepting the answer 吗?

标签: javascript jquery arrays object


【解决方案1】:

您可以简单地将forEach 函数与event Delegation 一起用于动态添加的buttons

您还需要使用 jQuery .append() 函数将所有按钮添加到 .check 类中。使用.html 将替换最后一个只显示最后一个按钮。

在下面运行 sn-p。 Clicks 正在研究每一个。

let Array1 = [{
    name: "try1",
    id: "id1",
    symbol: "symbol1"
  },
  {
    name: "try2",
    id: "id2",
    symbol: "symbol2"
  },
  {
    name: "try3",
    id: "id3",
    symbol: "symbol3"
  },
  {
    name: "try4",
    id: "id4",
    symbol: "symbol4"
  },
  {
    name: "try5",
    id: "id5",
    symbol: "symbol5"
  }
]

   //Loop through the array1
Array1.forEach(function(data) {
  //Append Each button
  $(".check").append(`<a id="${data.id}" class="btn btn-info myBtn" href="#" role="button">${data.id}</a><br>`)

})
 
//Click function on buttons
$(document).on('click', '.myBtn', function() {
   //get the id
  let getId = $(this).attr('id')

  //do something

  //Console
  console.log(getId)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="check">
</div>

【讨论】:

    【解决方案2】:

    您可以使用被动侦听器:

    let Array1 = [
        {name:"try1", id:"id1", symbol:"symbol1"},
        {name:"try2", id:"id2", symbol:"symbol2"},
        {name:"try3", id:"id3", symbol:"symbol3"},
        {name:"try4", id:"id4", symbol:"symbol4"},
        {name:"try5", id:"id5", symbol:"symbol5"}
    ]
    
    Array1.map(data => $(".check").append(`<a id="${data.id}" class="btn btn-info new-btn" href="#" role="button">${data.id}</a><br>`))
    
    $(document).on("click", ".new-btn", (e) => console.log(e.target.id))
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="check"></div>

    【讨论】:

      【解决方案3】:

      let Array1 = [{
          name: "try1",
          id: "id1",
          symbol: "symbol1"
        },
        {
          name: "try2",
          id: "id2",
          symbol: "symbol2"
        },
        {
          name: "try3",
          id: "id3",
          symbol: "symbol3"
        },
        {
          name: "try4",
          id: "id4",
          symbol: "symbol4"
        },
        {
          name: "try5",
          id: "id5",
          symbol: "symbol5"
        }
      ];
      
      Array1.forEach(({
        id
      }) => {
        $(".check").append(`<a id="${id}" class="btn btn-info" href="#" role="button">${id}</a>`);
        $('#' + id).on('click', function(e) {
          e.preventDefault();
          console.log($('#' + id).text());
        });
      });
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <div class="check"></div>

      【讨论】:

      • 使用forEach 就可以完成为什么要同时使用mapforeach。代码越少越好。
      • 在意识到别人的答案更好并使用forEach
      • @AlwaysHelping后实现手段?
      • 意味着您已经看到了上面的答案并更改了您的代码。简单如。无论如何都很好。
      • @AlwaysHelping 我意识到我的答案本身是错误的,所以更新了它。无需复制。
      猜你喜欢
      • 2015-03-25
      • 2010-11-28
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多