Javascript,将变量传递给click事件?

时间:2012-07-09 15:00:09

标签: javascript jquery

我真的无法弄清楚我会怎么做。它更像是一个概念问题,而不是一个代码问题,所以我只想发一个例子:

object = $('#div');

function doSomething(object) {
    //iterates through a list and creates a UL with items in corresponding to that list.
    $(body).append("<li id='clickme'>Hello world</li>");
}

function createModal(object) {
    //creates modal dialogue.
    doSomething(object);
    //more stuff
}

$('#clickme').live("click", function() {
    //I need access to object (not the object declared at first,
    //the object passed into doSomething) here.

});

任何想法我会怎么做这样的事情? doSomething将创建一组LI并将参数传递给它。当单击函数创建的那些LI时,它们需要与传递给doSomething的参数进行交互。有没有办法绑定他们或什么?

对不起,如果我没有任何意义。

4 个答案:

答案 0 :(得分:5)

您可以使用jquery data函数将数据与DOM元素相关联。然后,您可以在处理事件时读取这些数据。

另一种方法,一般不推荐但在一次大传递中构建html并且没有对DOM元素的轻松访问,并且只有字符串(或键)时有用,就是添加一个属性并检索稍后使用jquery's attr函数。我建议您尽可能使用数据功能。

答案 1 :(得分:2)

明确存储引用:

function doSomething(object) {
    //iterates through a list and creates a UL with items in corresponding to that list.
    $(body).append(
      $("<li/>", { id: 'clickme', text: 'Hello world',})
        .data('object', object)
    );
}

然后事件处理程序可以检索引用:

$('#clickme').live("click", function() {
    var object = $(this).data('object');
    // ...
});

也弃用.live()

$('body').on('click', '#clickme', function() {

是绑定委托事件处理程序的时髦新方法。

答案 2 :(得分:0)

object = $('#div');

function doSomething(object) {
    $(body).append("<li id='clickme'>Hello world</li>");
    $('#clickme').click(function(evt) {
        // Here you have access to `object`
    });
}

function createModal(object) {
    //creates modal dialogue.
    doSomething(object);
    //more stuff
}

这可能还不够。如果您要创建多个链接而不仅仅是标识为clickme的单个链接,则可能必须在附加单击处理程序时找到要使用的其他选择器。但是如果以这种方式嵌套函数,则可以访问创建单击处理程序时使用的参数object

答案 3 :(得分:0)

另一个选择是通过闭包(未测试)在参数位于范围内的位置声明和附加处理程序:

function doSomething(object) {
    $(body).append("<li id='clickme'>Hello world</li>").click(function() {
        //object is accessible here
    });
}