javascript - 在 onclick 中传递动态对象 - JavaScript/jQuery
问题描述
我想在onclick
jQuery 中传递一个动态对象。请检查下面的片段,其中我将对象product
值设为undefined
. 有人可以帮助我如何在 JavaScript/jQuery 中传递和接收对象值吗?
var hpc = "";
function handleProductsClick(e, product) {
debugger;
alert(product && JSON.stringify(product));
}
function buildProducts(products) {
var bp = '';
hpc = handleProductsClick.bind(products[i]);
for (var i = 0; i < products.length; i++) {
bp += '<li onclick="hpc(event)">' + products[i].value + '</li>';
}
$("#products").html(bp);
}
function getProductsFromApi() {
var products = [{
key: 1,
value: "Apple"
},
{
key: 2,
value: "Android"
}
];
buildProducts(products);
}
getProductsFromApi();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="products"></ul>
解决方案
尝试使用 Javascript 中的事件侦听器而不是内联 HTML 属性(与eval
. 此外,当您使用 时bind
,第一个参数是this
提供给函数的值;的第二个参数.bind
对应于另一个函数中的第一个参数。
function handleProductsClick(product) {
console.log(product && JSON.stringify(product));
}
function buildProducts(products) {
products.forEach(product => {
const li = $('<li>' + product.value + '</li>');
li.on('click', handleProductsClick.bind(null, product));
$("#products").append(li)
});
}
function getProductsFromApi() {
var products = [{
key: 1,
value: "Apple"
},
{
key: 2,
value: "Android"
}
];
buildProducts(products);
}
getProductsFromApi();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="products"></ul>
推荐阅读
- r - 将年份添加到只有月和日的时间序列
- git - 如何避免每次硬重置前叉?
- android - 如何防止.gradle文件夹在mac上被删除
- linux - 有没有办法使用 for 循环根据文件名创建目录?
- c# - Blazor WASM - 将身份用户分配给对象
- vhdl - vhdl 设计中的多个驱动程序
- angular - 带有其他 JSON 参数的 Kendo Angular 上传文件
- node.js - 学习 Node.js 需要 Express.js 吗?
- matlab - 0x0 空 GraphicsPlaceholder
- docker - 无法更改在 tensorflow docker 容器上运行的 jupyter 笔记本的工作目录