Javascript 定义';这';点击一下

Javascript 定义';这';点击一下,javascript,jquery,this,Javascript,Jquery,This,我有一大堆ajax函数,我在事件(单击、dblclick、按键等)上启动它们 在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_

我有一大堆ajax函数,我在事件(单击、dblclick、按键等)上启动它们 在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'进行计算时,元素'u id var将被解析,然后获取data-id

谢谢你的帮助

EDIT1:基本HTML结构

看起来像这样

<li data-id="<?php echo $item->getId(); ?>">
    <button class="js_btn_test">Test</button>
</li>

在正确的上下文中执行该
之前,无法正确解析该

var test = function(id)
{
    ajaxCall(id);
}

$('.js_btn_test').live('click', function()
{
    var element_id = $(this).parents('li').attr('data-id');
    test(element_id);

    func01(element_id);
    func02(element_id);
    // etc
}

在正确的上下文中执行之前,您无法正确解析此

var test = function(id)
{
    ajaxCall(id);
}

$('.js_btn_test').live('click', function()
{
    var element_id = $(this).parents('li').attr('data-id');
    test(element_id);

    func01(element_id);
    func02(element_id);
    // etc
}

如果我理解正确,那么您要做的就是将基于单击的元素获取
id
的逻辑放入变量中。这是不可能的,除非您将其设置为函数(在这种情况下,根本不需要将其设置为变量)

例如:

function getIdFromElement(el) {
    return $(el).parents('li').attr('data-id');
}

$('.js_btn_test').live('click', function()
{
    test(getIdFromElement(this));
}

如果我理解正确,那么您要做的就是将基于单击的元素获取
id
的逻辑放入变量中。这是不可能的,除非您将其设置为函数(在这种情况下,根本不需要将其设置为变量)

例如:

function getIdFromElement(el) {
    return $(el).parents('li').attr('data-id');
}

$('.js_btn_test').live('click', function()
{
    test(getIdFromElement(this));
}

不,不是那样的。与

var元素_id=$(this).parents('li').attr('data-id')

。。。您可以立即为
元素\u id
变量指定一个值,而不取决于下次检查其值时该
变量将是什么

一种可能的解决方法是改用函数:

var getElementId = function(el) {
  return $(el).parents('li').attr('data-id');
};
...
$('.js_btn_test').live('click', function() {
   test(getElementId(this));
});
。。。正如
事件处理程序(传递给
live
的匿名函数)中的该
引用触发事件的元素


作为旁注,您可以将
.attr('data-id')
交换为
.data('id')
调用,如图所示和所述。

不,它不是这样工作的。与

var元素_id=$(this).parents('li').attr('data-id')

。。。您可以立即为
元素\u id
变量指定一个值,而不取决于下次检查其值时该
变量将是什么

一种可能的解决方法是改用函数:

var getElementId = function(el) {
  return $(el).parents('li').attr('data-id');
};
...
$('.js_btn_test').live('click', function() {
   test(getElementId(this));
});
。。。正如
事件处理程序(传递给
live
的匿名函数)中的该
引用触发事件的元素


作为旁注,您可以将
.attr('data-id')
交换为
.data('id')
调用,如图所示和所述。

您无法获得
,因为它还不在上下文中

在jquery的最新版本中,
live
也被弃用

以下是jquery网站的摘录

从jQuery 1.7开始,
.live()
方法已被弃用。使用
.on()
附加事件处理程序。较旧版本的jQuery用户应优先使用
.delegate()
,而不是
.live()


您无法获取此
,因为它还不在上下文中

在jquery的最新版本中,
live
也被弃用

以下是jquery网站的摘录

从jQuery 1.7开始,
.live()
方法已被弃用。使用
.on()
附加事件处理程序。较旧版本的jQuery用户应优先使用
.delegate()
,而不是
.live()


请在帖子中添加(一些)HTML源代码,为什么不给它一个id。。然后执行:.attr(“id”)请在您的帖子中添加(一些)HTML源代码,为什么不给它一个id。。然后做:.attr(“id”)我知道,这正是我想要实现的。我有30多个函数,所以我想使用一个变量,而不是每次复制$(this).parents('li').attr('data-id'),以防我要重构。@Ping-然后从
单击
处理程序调用这30多个函数。>在它在适当的上下文中执行之前,无法正确地解决此问题。好的,非常感谢你的回答@Ping-您没有提到这30多个函数的执行时间和方式。这是程序吗?事件处理程序?你在这里询问架构的建议,如果没有合适的背景,这几乎是无中生有。他们都是事件处理程序。我将javascript结构组织如下:events.js捕获所有事件(点击、dbl点击、按键、按键、鼠标移动……),并调用ajax_functions.js中定义的ajax函数。然后,ajax_函数通过一个ajax_router.php文件调用正确的对象。我不太确定这是否是一个好的实践,但它在我的小项目中非常有效。我知道,这正是我想要实现的。我有30多个函数,所以我想使用一个变量,而不是每次复制$(this).parents('li').attr('data-id'),以防我要重构。@Ping-然后从
单击
处理程序调用这30多个函数。>在它在适当的上下文中执行之前,无法正确地解决此问题。好的,非常感谢你的回答@Ping-您没有提到这30多个函数的执行时间和方式。这是程序吗?事件处理程序?你在这里询问架构的建议,如果没有合适的背景,这几乎是无中生有。他们都是事件处理程序。我将javascript结构组织如下:events.js捕获所有事件(点击、dbl点击、按键、按键、鼠标移动……),并调用ajax_functions.js中定义的ajax函数。然后,ajax_函数通过一个ajax_router.php文件调用正确的对象。我不太确定这是否是一个好的实践,但它在我的小项目中运行得很好。所以在“li”中没有办法对多个事件/元素执行它?例如,如果我想在用class.js_btn_test2Why双击另一个按钮时获取数据id,那么可以在
dblclick
事件处理程序中重用该函数。关键是