Javascript 定义';这';点击一下
我有一大堆ajax函数,我在事件(单击、dblclick、按键等)上启动它们 在events.js文件的开头,我想定义一个变量,它表示用户单击的元素的id。现在是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_
$(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
事件处理程序中重用该函数。关键是