我在事件(点击,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')调用,如herehere所述。

09-25 17:03
查看更多