-2

好的,我知道它的实际含义是什么$(this),并且this是朝着什么方向发展的。但是我正在做一个小项目,我试图将我拥有的一些重复代码整合到可重用的函数中。

有了它,我有一个函数,我想在同一个父 div 中为它下面的特定对象设置动画。哪个有效,这已确认。但是,我有两个事件希望从当前触发。

一个是加载事件,.ready()我在符合此要求的元素上运行一个$.each()循环,并且效果很好。将有问题的元素传递给我使用的函数

$(this)单独作为函数的参数,函数采用该参数并根据该项目的规范对其进行处理。但是,问题出在哪里是我想用来触发此功能的第二个事件。

这是基于每个元素的基于点击的事件。因为我已经尝试过.click(),它们中.live()似乎是唯一能识别物体的东西。我目前在这个项目上坚持使用 jQuery 1.4.4。所以对我来说不可用,否则我也会尝试。我也很困惑为什么或不会工作,尽管元素使用 DOM 渲染,但是这与我目前正在寻找的完全不同。.delegate()live().on()delegate()click()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');
        }
    }
}

现在为了节省你们这些人的时间,问我为什么不直接使用类似 jQuery UI 的东西来获得相同的效果,那么简单地说它是一个样式问题,以及一旦这些功能正确就位后计划的一些其他功能。无论哪种情况,定制需求都超越了简单的概念。

无论如何,在点击的情况下,我开始怀疑是否$(this)以某种方式拾取了错误的东西,如果是,那么它可能没有按预期工作,所以如果是这样的话,我试图弄清楚我是如何可以找到$(this)实际上是哪个元素

快速编辑,对于那些想要看到这一切的人,我制作了一个小提琴版本。 http://jsfiddle.net/sDeq2/也包含 HTML 部分

4

2 回答 2

1

你不能打印出 id 或其他可识别的属性吗?

$(this).attr('id')
于 2012-12-10T22:33:20.447 回答
0

看来我误解了最初的方法。我将不得不根据您遇到的问题的描述(.live 有效,但 .click 无效)建议您在 DOM 实际准备好之前执行代码(在 .ready() 调用中)。

所有这三个事件附件场景都可以在上下文之外正常工作。 http://jsfiddle.net/CsP2g/

$(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)');
    });
});
于 2012-12-10T22:35:22.357 回答