我在事件(点击,dblclick,按键等)上启动了许多ajax函数
在我的events.js文件的开头,我想定义一个变量,该变量代表用户单击的元素的ID。目前是
$(this).parents('li').attr('data-id')
到目前为止,我尝试过这种方式:
var element_id = $(this).parents('li').attr('data-id');
var test = function(id)
{
ajaxCall(id);
}
$('.js_btn_test').live('click', function()
{
test(element_id);
}
不幸的是,它不起作用。我认为,当我单击.js_btn_test并被评估为其父级“ li”时,会解析element_id var,然后获取数据ID。
谢谢你的帮助 !
EDIT1:基本HTML结构
看起来像这样
<li data-id="<?php echo $item->getId(); ?>">
<button class="js_btn_test">Test</button>
</li>
最佳答案
不,它不是那样工作的。用...var element_id = $(this).parents('li').attr('data-id');
...您立即为element_id
变量分配了一个值,而不依赖于下次检查this
值时将是什么。
一种可能的解决方法是改用函数:
var getElementId = function(el) {
return $(el).parents('li').attr('data-id');
};
...
$('.js_btn_test').live('click', function() {
test(getElementId(this));
});
...作为事件处理程序(您传递给
this
的匿名函数)中的live
指的是引发事件的元素。作为旁注,可以将
.attr('data-id')
交换为.data('id')
调用,如here和here所述。