将变量传递给jQuery on()方法

时间:2015-07-17 15:09:31

标签: jquery events delegates

如何使这个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”。

提前致谢:)

2 个答案:

答案 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
    });
}