Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
422 views
in Technique[技术] by (71.8m points)

jquery - Using '$(this)' In A Function

I am creating a menu that opens and closes using jQuery. In simple terms, it works like this:

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;
    }
}

If I take the contents of open_menu() and put it in place of open_menu() in the .click() event, every works as expected. If I use the code as show above, $(this) can not figure out that .click() fired it and the code does not run.

Is there something that I can do to have the $(this) selector negotiate what fired it while keeping it in open_menu()?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The this that you refer to in open_menu is the context of the open_menu function, not the click handler of the link. You need to do something like this:

open_menu(this);

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...