0

我真的不知道我会怎么做。这更像是一个概念问题而不是代码问题,所以我将发布一个示例:

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

4 回答 4

5

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

另一种方法,通常不推荐,但当您在一个大通道中构建 html 并且无法轻松访问 DOM 元素并且只有字符串(或键)时很有用,是添加一个属性并稍后使用检索它jquery 的 attr函数。不过,我建议您尽可能使用数据功能。

于 2012-07-09T15:03:16.537 回答
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() {

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

于 2012-07-09T15:05:34.187 回答
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
}

这可能还不够。如果您要创建多个链接而不仅仅是一个带有 id 的链接,clickme您可能需要在附加点击处理程序时找到一个不同的选择器来使用。但是,如果您以这种方式嵌套函数,则可以访问object创建单击处理程序时使用的参数。

于 2012-07-09T15:11:16.927 回答
0

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

function doSomething(object) {
    $(body).append("<li id='clickme'>Hello world</li>").click(function() {
        //object is accessible here
    });
}
于 2012-07-09T15:14:23.197 回答