如何使这个jQuery代码工作?我在“someVariable”中兑换了一些元素,我想在on()方法中使用它,如下所示:
function test() {
var elementsBlock = $('.elements-block'),
someVariable1 = elementsBlock.find('.some-el-1'),
someVariable2 = elementsBlock.find('.some-el-2'),
...
someVariableN = elementsBlock.find('.some-el-n');
// some code
elementsBlock.on('click', someVariableN, function() {
// do sth
});
}
test();
我想在参数中传递变量,而不是选择器(“.some-el-n”)。可能吗?如果我运行此函数,则事件适用于“elementsBlock”而不适用于“someVariableN”。
提前致谢:)
答案 0 :(得分:0)
不,你不能。使用event delegation,您必须使用选择器。它用于捕获动态创建的元素的点击次数。如果您已经知道存在的元素,则不需要事件委派:
someVariableN.on('click', function() {
// do sth
});
如果要附加以类some-el
开头的变量,可以使用事件委派:
elementsBlock.on('click', '[class^="some-el"]', function() {
// do sth
});
但如果这些元素都不是动态创建的,那么以下行也会做同样的事情:
$('[class^="some-el"]').on('click', function() {
// do sth
});
答案 1 :(得分:0)
对于来自其他语言的许多程序员来说有点奇怪,但在JavaScript中,您可以访问在函数外部声明的变量。 (如果你想要一个例子,请查看w3school JavaScipt closures)
在您的情况下,这意味着您可以访问someVariableN
而不将其作为参数传递:
function test() {
var elementsBlock = $('.elements-block'),
someVariable1 = elementsBlock.find('.some-el-1'),
someVariable2 = elementsBlock.find('.some-el-2'),
...
someVariableN = elementsBlock.find('.some-el-n');
elementsBlock.on('click', function() {
alert(someVariableN.length); //You can use someVariableN here
});
}