JavaScript:如何将对象作为参数传递给addEventListener函数?
我的JavaScript代码如下JavaScript:如何将对象作为参数传递给addEventListener函数?,javascript,jquery,Javascript,Jquery,我的JavaScript代码如下 $.getJSON( "sample_json.json", function( data ) { //javascript object var someId = data['item'][0]['id']; console.log("Outside addEventListener "+someId); //create <tr> element var tr = document.createElement('tr');
$.getJSON( "sample_json.json", function( data ) {
//javascript object
var someId = data['item'][0]['id'];
console.log("Outside addEventListener "+someId);
//create <tr> element
var tr = document.createElement('tr');
//bind click event
tr.addEventListener("click",function() {
console.log("inside addEventListener "+someId);
someFunction(someId);
},false);
});
//function
function someFunction(someId){
console.log("Inside someFunction "+someId);
}
当我将someId
更改为
var someId = 150;
它工作得很好
Outside addEventListener 150
Inside addEventListener 150
Inside someFunction 150
我应该在javascript代码中更改什么,以便在单击事件时从javascript对象获取实际id
注意:我已经提到了关于堆栈溢出的现有问题。
但没有多大帮助
Edit:使用一些jquery函数更新了javascript代码,这将从JSON文件创建
数据
javascript对象。也许您稍后在程序中将someId更改为1,这就是事件处理程序打印1而不是150的原因。
如果围绕事件处理程序函数创建闭包,则可以将someId绑定到创建事件处理程序函数时的值(150)。
可以创建如下所示的闭包:
tr.addEventListener("click",(function(someId)
{
return function() {
console.log("inside addEventListener "+someId);
someFunction(someId);
}
})(someId),false);
也许您稍后在程序中将someId更改为1,这就是事件处理程序打印1而不是150的原因。 如果围绕事件处理程序函数创建闭包,则可以将someId绑定到创建事件处理程序函数时的值(150)。 可以创建如下所示的闭包:
tr.addEventListener("click",(function(someId)
{
return function() {
console.log("inside addEventListener "+someId);
someFunction(someId);
}
})(someId),false);
我建议您使用
数据属性
$.getJSON( "sample_json.json", function( data ) {
//javascript object
var someId = data['item'][0]['id'];
console.log("Outside addEventListener "+someId);
//create <tr> element
var tr = document.createElement('tr');
tr.setAttribute('data-someId', someId);
//bind click event
$('tr').on("click",function() {
console.log("inside addEventListener "+$(this).data('someId'));
someFunction($(this).data('someId'));
},false);
});
//function
function someFunction(someId){
console.log("Inside someFunction "+someId);
}
$.getJSON(“sample_json.json”),函数(数据){
//javascript对象
var someId=data['item'][0]['id'];
log(“外部addEventListener”+someId);
//创建元素
var tr=document.createElement('tr');
tr.setAttribute('data-someId',someId);
//绑定单击事件
$('tr')。在(“单击”,函数()上){
log(“内部addEventListener”+$(this.data('someId'));
someFunction($(this.data('someId'));
},假);
});
//作用
函数someFunction(someId){
log(“内部someFunction”+someId);
}
希望这能对您有所帮助。我建议您使用
数据属性
$.getJSON( "sample_json.json", function( data ) {
//javascript object
var someId = data['item'][0]['id'];
console.log("Outside addEventListener "+someId);
//create <tr> element
var tr = document.createElement('tr');
tr.setAttribute('data-someId', someId);
//bind click event
$('tr').on("click",function() {
console.log("inside addEventListener "+$(this).data('someId'));
someFunction($(this).data('someId'));
},false);
});
//function
function someFunction(someId){
console.log("Inside someFunction "+someId);
}
$.getJSON(“sample_json.json”),函数(数据){
//javascript对象
var someId=data['item'][0]['id'];
log(“外部addEventListener”+someId);
//创建元素
var tr=document.createElement('tr');
tr.setAttribute('data-someId',someId);
//绑定单击事件
$('tr')。在(“单击”,函数()上){
log(“内部addEventListener”+$(this.data('someId'));
someFunction($(this.data('someId'));
},假);
});
//作用
函数someFunction(someId){
log(“内部someFunction”+someId);
}
希望这将对您有所帮助。否我的数据对象未在任何地方修改。此代码应能正常工作否我的数据对象未在任何地方修改。此代码应work@Pankaj欢迎朋友:)。请接受答案。@Pankaj欢迎好友:)。请接受答案。