我真的无法弄清楚我会怎么做。它更像是一个概念问题,而不是一个代码问题,所以我只想发一个例子:
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的参数进行交互。有没有办法绑定他们或什么?
对不起,如果我没有任何意义。
答案 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
});
}