使用jQuery的$(this)会在函数内部抛出错误

Oli*_*ton 0 javascript jquery function

可能重复:
jquery将$(this)传递给其他函数

我正在编写一个Javascript/jQuery函数(不是REFACTORED YET),但是我收到了一个错误$(this).这有点难以解释所以我将添加代码,希望它会变得更加清晰:

var accordion = 'div.accordionContent';
var accordButton = 'div.accordionButton';
var accordClosedArrow = 'url(/public/img/accordion-closed-arrow-';
var accordOpenArrow = 'url(/public/img/accordion-open-arrow-';
$(accordion).hide();
var accordFunc = function(arrowColor){
    var img;
    if ($(this).next(accordion).is(':visible')) {
        img = accordClosedArrow + arrowColor + '.png)';
    } 
    else {
        img = accordOpenArrow + arrowColor + '.png)';
    }

    // these lines throw errors because of $(this)
    $(this).css({backgroundImage:img}).next().slideToggle('slow').siblings(accordion)
        .slideUp();
    $(this).siblings()
        .css({backgroundImage:accordClosedArrow + arrowColor + '.png)' + 'no-repeat'});
    };

    $(accordButton).live('click',function(){
        accordFunc('blue');
    });

    $(accordButton + 'B').live('click',function(){
        accordFunc('orange');
    });
Run Code Online (Sandbox Code Playgroud)

不确定为什么传递$(this)会导致Chrome控制台抛出错误:

未捕获的TypeError:无法读取未定义的属性"firstChild"

Thi*_*ter 5

更换accordFunc('blue');accordFunc.call(this, 'blue');和其他调用该函数也这样做.

this当您调用另一个函数时,该值不会被保留,因此其内部accordFunc指向窗口对象或null(如果严格模式处于活动状态).另一种选择是this作为普通参数传递并将函数定义更改为例如function accordFunc(elem, arrowColor)并使用elem而不是this在函数内部.