在函数中使用'$(this)'

时间:2012-02-03 00:49:08

标签: jquery function this

我正在创建一个使用jQuery打开和关闭的菜单。简单来说,它的工作原理如下:

function open_menu() {
    $(this).next('ul.sub-menu').css('display', 'block').stop(true, false).animate({
        width: '235px',
    }, 500);
}

function close_menu() {
    // close code here
}

status = 'closed'; // set the default menu status

$('a').click(function() {
    switch(status) {
        case 'closed':
            open_menu();
            break;
        case 'open':
            close_menu();
            break;
    }
}

如果我在open_menu()事件中使用open_menu()的内容并将其替换为.click(),则每个内容都按预期工作。如果我使用上面显示的代码,则$(this)无法确定.click()已解雇该代码并且代码未运行。

我可以采取哪些措施让$(this)选择器协商将其保留在open_menu()中的内容吗?

3 个答案:

答案 0 :(得分:20)

this中引用的open_menuopen_menu函数的上下文,而不是链接的点击处理程序。你需要做这样的事情:

open_menu(this);

function open_menu(that) {
    $(that).next(...

答案 1 :(得分:5)

您可以使用apply在函数中设置this的值。

open_menu.apply(this)

答案 2 :(得分:3)

为什么不直接将其作为参数传递?

function open_menu($this) {
    $this.next('ul.sub-menu').css('display', 'block').stop(true, false).animate({
        width: '235px',
    }, 500);
}

function close_menu() {
    // close code here
}

status = 'closed'; // set the default menu status

$('a').click(function() {
    switch(status) {
        case 'closed':
            open_menu($(this));
            break;
        case 'open':
            close_menu();
            break;
    }
}