Javascript jQuery找出哪一个元素$(this)实际上是对的引用
好的,我知道Javascript jQuery找出哪一个元素$(this)实际上是对的引用,javascript,jquery,dom,animation,Javascript,Jquery,Dom,Animation,好的,我知道$(这个)和这个是什么意思。但我正在做的一个小项目,我试图将一些重复代码整合到可重用函数中 有了它,我就有了一个函数,我想在同一个父分区中为它下面的特定对象设置动画。这是可行的,这是确定的。然而,我有两个事件,我希望这是从目前触发 一个是加载事件,在.ready()上我运行一个$。每个()在符合此要求的元素上循环,运行良好。将相关元素传递给我使用的函数 $(this)单独作为函数的参数,函数根据此项目的规范获取该参数并对其进行处理。然而,问题来自于我想用来触发此函数的第二个事件 这是
$(这个)
和这个
是什么意思。但我正在做的一个小项目,我试图将一些重复代码整合到可重用函数中
有了它,我就有了一个函数,我想在同一个父分区中为它下面的特定对象设置动画。这是可行的,这是确定的。然而,我有两个事件,我希望这是从目前触发
一个是加载事件,在.ready()
上我运行一个$。每个()
在符合此要求的元素上循环,运行良好。将相关元素传递给我使用的函数
$(this)
单独作为函数的参数,函数根据此项目的规范获取该参数并对其进行处理。然而,问题来自于我想用来触发此函数的第二个事件
这是基于每个元素的单击事件。为此,我尝试了。click()
,。live()
,。delegate()
,其中live()
似乎是唯一能识别对象的东西。我目前在这个项目上一直使用jQuery1.4.4。因此,.on()
对我不可用,或者我也想试试。我也很困惑为什么delegate()
或click()
不起作用,尽管使用DOM呈现元素,但只有live()
会起作用,但这与我目前正在寻找的完全不同
底线是,在这个示例中,我通过前面提到的循环调用函数的方式是可行的:
$('.panels h3').each(function()
{
accordionUpDown($(this), false);
});
这个基于点击的例子不起作用,但人们会认为它应该起作用,但它不起作用
$('.panels h3').live('click',function()
{
accordionUpDown($(this), true);
});
此处还有函数本身供参考:
function accordionUpDown(theElem, fx)
{
//alert('test'+theElem);
if(theElem.hasClass('active'))
{
var $elem = theElem.next('div');
var elemY = ($elem.children('div').innerHeight()+2);
if(fx == false)
{
$elem.addClass('active').css({height:elemY+'px'});
}
else
{
$elem.addClass('active').animate({height:elemY+'px'}, 2000);
}
}
if(!theElem.hasClass('active'))
{
var $elem = theElem.next('div');
var elemY = '0px';
if(fx == false)
{
$elem.css({height:elemY}).removeClass('active');
}
else
{
$elem.animate({height:elemY}, 2000).removeClass('active');
}
}
}
现在,为了节省你们的时间,我要问为什么我不使用类似jqueryui的东西来达到同样的效果,那么简单地说,这是一个样式问题,以及一些其他的功能,一旦这些功能正确到位,就计划好了。在这两种情况下,定制需求都超越了简单的概念
无论如何,在点击的情况下,我开始怀疑$(此)
是否以某种方式拾取了错误的东西,如果是,那么可能它没有按照预期的原因工作,因此如果是这样,我试图找出如何找到$(此)
实际是哪个元素
快速编辑,对于那些想看到所有内容的人,我制作了一个小提琴版本。
也包括HTML部分您不能打印出id或其他可识别属性吗
$(this).attr('id')
我似乎误解了最初的方法。根据对您遇到的问题的描述(.live-works,但是.click-not),我不得不建议您在DOM实际就绪之前(在.ready()调用中)执行代码 所有这三种事件附件场景都可以在上下文之外正常工作。
我目前没有使用ID,但这是找到我需要的一个可行的解决方案,我可以将ID添加到我尝试引用的每个H3中,看看它是否会吐出任何东西,感谢开发者控制台上的IDEA,您也可以输入以下内容,它应该吐出一个匹配元素数组$(“.panels H3”)放置
调试器
语句位于手风琴向上向下的开头
。单击H3元素。如果开发工具处于打开状态,则应暂停代码执行。现在,您可以检查作为第一个参数传递的值。如果.live()
有效,那么您可能是在DOM准备就绪之前分配了处理程序。嗯,我不太喜欢使用live。但是你是说我应该把我所有的live()
调用都放在ready()
中吗?你是说.live()
版本才有效,对吗?“你的问题很难理解。”我承认,我再一次重复我的问题,它有点失控,从我最初想问的问题到现在的问题。总的来说,我想知道如何在$(此)
的情况下找出[对象对象]
是什么,这样我就可以知道该对象是否是我假设的正确对象,然后,问题是如何从这一点发展到我目前实际正在做的事情,这基本上就是我想知道的原因。OP正在使用live()
附加单击处理程序。误解了OP的方法。根据@Šime Vidas注释修复。
$(document).ready(function(){
$('.someClass h3').click(function(){
alert('fired click event that was bound to multiple items at once using .click()');
});
$('.someClass h3').each(function(){
$(this).click(function(){
alert('fired click event that was bound to one item at a time using .each and .click()');
});
});
$('.someClass h3').live("click", function(){
alert('fired click event that was bound to multiple items at once using .live("click", func)');
});
});