javascript - 在运行时将对象传递给 javascript 函数

标签 javascript jquery

在运行时,我有 Javascript 创建 html,我想在它们上绑定(bind)一个对象以传递给一个函数供以后使用。

像这样:

var projects = //(json object)
projects.forEach(function(p) {
   $("#container").append("<div onclick=handleClick(p)></div>");
});

function handleClick(p) {
  //...
}

这样做似乎使 p 成为字符串 [object object] 而不是实际的 Project 对象,并且使用 JQuery 的内置 $.click 函数是一回事.我知道我必须在运行时以某种方式将这些元素绑定(bind)到一个函数。

在没有过度搜索和 DOM 访问的情况下执行此类操作的正确方法是什么?

最佳答案

您可以创建您的内容并使用 JavaScript 而非内联 HTML 处理程序设置其点击处理程序。

var projects = [{id: 1}, {id:2}, {id:3}];
projects.forEach(function(p) {
   $("#container").append($("<div>Test </div>").click(function(e){
       handleClick(p);
   }));
});

function handleClick(p) {
  console.log('Clicked project', p.id);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="container">
Content here
</div>

请注意,更好的选择(因为您只需要一个处理程序,而不必担心以后添加处理程序)是在父级上设置一个处理程序,并且您可以在每个 div 上使用 data-pid 属性这将使您的处理程序根据单击的 div 找到正确的项目。

$(() => {
  var projects = [{id: 1}, {id: 2}, {id: 3}];
  projects.forEach(function(p) {
    $("#container").append("<div class=clicky data-pid=" + p.id + ">Project " + p.id + " </div>");
  });
  $("#container").click('.clicky', (e) => {
    console.log('Clicked paragraph for ' + $(e.target).data('pid'));
  })

})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="container">
  Content
</div>

关于javascript - 在运行时将对象传递给 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43059303/

相关文章:

javascript替换现有键的值并加上1其他键和值

javascript - 如何禁用所有 div 内容

javascript - 如何在 bool 值变化时运行函数?

javascript - 查找并删除通用元素

javascript - 使用/不使用原型(prototype)的 JS 继承

javascript - 在 Javascript 中使用 document.writeln 和输入表单

javascript - REACT 从嵌套 JSON 中获取属性

javascript - Firebase Auth 检查 Facebook 上的新用户是否登录

javascript - 悬停在图像上时添加 div 元素类

jquery - 使用 jQuery ui.sortable 时未触发鼠标悬停事件