JavaScript:如何将对象作为参数传递给addEventListener函数?

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');

我的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');

  //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欢迎好友:)。请接受答案。