javascript将值传递给函数不起作用
我昨天问了这个问题,但我的代码不清楚,所以无法得到答案,我试图在这里创建一个实际问题的副本 我试图做的是,这是一个html表,我对所有行进行迭代,然后到每行的一个特定列我附加一个事件处理程序,单击该事件处理程序应该输出一些计算对象,但它总是返回javascript将值传递给函数不起作用,javascript,Javascript,我昨天问了这个问题,但我的代码不清楚,所以无法得到答案,我试图在这里创建一个实际问题的副本 我试图做的是,这是一个html表,我对所有行进行迭代,然后到每行的一个特定列我附加一个事件处理程序,单击该事件处理程序应该输出一些计算对象,但它总是返回{“isTrusted”:true} var ff = function(el){ return function(el){ alert(el) }; // the output is always {"isTrusted":true} }
{“isTrusted”:true}
var ff = function(el){
return function(el){ alert(el) }; // the output is always {"isTrusted":true}
}
function Fi(selector, func) {
document.querySelectorAll(selector).forEach(function(node{
node.onclick = func;
})
;}
//-------------- main calling code--------------------------------
document.querySelectorAll('#myTable > tbody > tr').forEach(function (node) {
cells = node.querySelectorAll('td');
var info = {};
info.age = cells[1].innerText;
Fi('td:nth-child(1) > a', ff(info));
})
编辑:
我试着这样做:
var ff = function (el) {
return function() { alert(el) };
}
但问题是
对于表中的每一行,都应该创建一个实际上正在发生的新信息对象
document.querySelectorAll('#myTable > tbody > tr').forEach(function (node) {
cells = node.querySelectorAll('td');
//--------->loop over all rows and create info object
var info = {};
info.age = cells[1].innerText;
//---------> when the cell is clicked always the last info object is shown but for every row it should be different
Fi('td:nth-child(1) > a', ff(info));
})
ff
采用参数el
。然后它返回一个函数,该函数还接受一个参数el
。后一个el
阴影笼罩着前一个el
。因此,el
将是直接传递给事件处理程序的参数,而不是传递给ff
的参数(这将是一个事件
对象)
去掉内部的el
参数:
var ff = function (el) {
return function () { alert(el) };
}
ff
采用参数el
。然后它返回一个函数,该函数还接受一个参数el
。后一个el
阴影笼罩着前一个el
。因此,el
将是直接传递给事件处理程序的参数,而不是传递给ff
的参数(这将是一个事件
对象)
去掉内部的el
参数:
var ff = function (el) {
return function () { alert(el) };
}
`document.querySelectorAll。(`这无效。在
querySelectorAll
@CertainPerformance之后有一个额外的
,在这里键入时是打字错误。修复了它,但这不是suuequerySelectorAll
只接受1个参数。如果要在节点内搜索,请使用节点。querySelectorAll('td'))Fi
的第二个参数应该是function(){ff(info);}
`document.queryselectoral。(`这是无效的。在querySelectorAll
@CertainPerformance之后有一个额外的
,在这里键入时是打字错误。修复了它,但这不是suuequerySelectorAll
只接受1个参数。如果要在节点内搜索,请使用节点.querySelectorAll('td'))Fi
的第二个参数应该是function(){ff(info);}
。我使用了您最初给出的版本,但在这种情况下,info对象始终是wsa ebing生成的最后一个值,我不确定我是否理解您的意思。@anekixFi('td:nth child(1)>a',ff(info));
是一个通用选择器,因此它将始终向所有具有最新信息值的a
元素添加事件处理程序。@anekix gvmani已经指出了上述问题。您只需将事件处理程序附加到所有td:n子元素(1)
。再附加到所有全局td:n子元素(1)
您文档中的任何地方!@gvmani为什么使用最新的信息
值?这正是发生的事情,我不希望出现这种行为。为了避免这种情况,我创建了ff()
function我使用了您最初给出的版本,但在这种情况下,info对象始终是wsa ebing生成的最后一个值。我不确定我是否理解您的意思。@anekixFi('td:nth child(1)>a',ff(info));
是一个通用选择器,因此它将始终向所有具有最新信息值的a
元素添加事件处理程序。@anekix gvmani已经指出了上述问题。您只需将事件处理程序附加到所有td:n子元素(1)
。再附加到所有全局td:n子元素(1)
您文档中的任何位置!@gvmani为什么使用最新的info
值?这正是发生的情况,我不希望出现这种行为。为了避免这种情况,我创建了ff()
函数