2012-04-12 65 views
0

我想添加一个事件处理程序给一些动态添加的元素。我将我的问题简化为下面的基本代码。我在功能上使用新的JQuery 1.7来说:“当点击它们时,CancelSurvey id元素中的所有标签都会调用此通知函数。”jquery添加事件

function notify(event) { 
    console.log(event.data.name); 
} 
$('#CancelSurvey').on('click', 'label', { name: $(this).attr("id") }, notify); 

我想传递标签的id作为参数“name”。当我尝试提醒它时,它是未定义的(它们是在创建的html中定义的)。我相信在这种情况下使用$(this)不会引用标签选择器。它实际上似乎是引用文档本身。关于如何完成这一任何想法?

回答

2

这是因为您正在评估分配处理程序的封闭上下文的this,因此它不是对eleent的引用。

由于您知道该ID,因此您可以使用字符串。

$('#CancelSurvey').on('click', 'label', { name: 'CancelSurvey' }, notify); 

或跳过事件数据,只是把它从元素的处理程序

function notify(event) { 
    console.log(this.id); 
} 
+0

试图通过点击标签的ID。想要做这个天气或没有我知道的CancelSurvey。这种情况有点简化。匿名函数不适合我想要做的全部范围 – JBone 2012-04-12 17:34:53

+0

@JBone:请参阅我的答案的后半部分。您不需要将其存储在事件对象中。只需在处理程序中使用'this.id'。如果函数是匿名的,则无关紧要。我正在使用'notify'函数。 – 2012-04-12 17:36:34

0

触发事件应该传递到单击处理DOM元素,你可以在事件处理程序中以这种方式拉出ID。我很确定在处理程序中,this指向触发事件的DOM元素。