2012-12-11 58 views
0

我有一些鏈接,我想基本上做一個類交換。當我有它設置像這樣運行,一路過關斬將:jquery addClass函數只有拳頭一半作品

$("#work").click(function() { 
    $(".nav_middle_text").removeClass("selected"); 
    $(".nav_middle_text").addClass("notselected"); 
    $(this).removeClass("notselected"); 
    $(this).addClass("selected"); 


    a1=1; 

    $("#top_section").animate({ 
     height:30 
    },450); 
    $("#bottom_section").animate({ 
     height:$("#grid").outerHeight(true) 
    }, 450); 
    $("#about_container").animate({ 
     marginTop:$("#about_container").outerHeight(true) *-1 
    }, 450); 

}); 

但是當我嘗試這樣運行它的前兩個附加與特定類別設置它,並刪除類,但後兩個使用'this'不起作用。以這種方式運行它是否有理由阻止「this」的運行?

function nav_click() { 
    $(".nav_middle_text").removeClass("selected"); 
    $(".nav_middle_text").addClass("notselected"); 
    $(this).removeClass("notselected"); 
    $(this).addClass("selected");   
}  



$("#work").click(function() { 
    nav_click(); 


    a1=1; 

    $("#top_section").animate({ 
     height:30 
    },450); 
    $("#bottom_section").animate({ 
     height:$("#grid").outerHeight(true) 
    }, 450); 
    $("#about_container").animate({ 
     marginTop:$("#about_container").outerHeight(true) *-1 
    }, 450); 
}); 

預先感謝任何幫助

+0

你在檢查'#工作'類嗎? – Swadq

+0

好吧,他們應該沒問題,因爲當我將函數內容直接放到工作點擊函數中時,它可以正常工作,但是當我將它作爲在工作區外寫入的函數時,請單擊「此」名稱似乎不起作用。 – loriensleafs

回答

2

當你調用該函數nav_click()this不再是什麼東西的點擊處理程序中。如果要使用nav_click()函數,則必須將this的值傳遞給該函數。你可以做到這一點引起this要在函數內部適當設置:

nav_click.call(this); 

或者,你可以把它當作一個普通參數,改變nav_click()使用這樣的說法

nav_click(this); 

function nav_click(item) { 
    $(".nav_middle_text").removeClass("selected"); 
    $(".nav_middle_text").addClass("notselected"); 
    $(item).removeClass("notselected"); 
    $(item).addClass("selected");   
} 

僅供參考,函數內部的值this由調用函數的方式決定。如果僅使用nav_click()等正常函數調用,則this將重置爲window對象(正常JS模式)或undefined(JS嚴格模式)。

要明確地將this設置爲函數內的特定值,請使用.apply().call()。請參閱MDN頁面,瞭解這些方法的說明herehere

+0

好吧,這是有道理的,非常感謝你爲我解釋 – loriensleafs

0

在匿名事件處理函數的上下文中,this引用事件發生的元素。出於這個原因,this沒有引用你認爲它在第二個上下文中的含義。

您可以將元素傳遞給函數,但是:

function nav_click(element) { 
    $(".nav_middle_text").removeClass("selected"); 
    $(".nav_middle_text").addClass("notselected"); 
    $(element).removeClass("notselected"); 
    $(element).addClass("selected");   
} 

$("#work").click(function() { 
    nav_click(this); 
    // etc 
}); 
0

正在發生,因爲你是不是在你只需要通過該元素的回調函數傳遞什麼,這doen't參考#工作,所以你無法改變班級這樣做...

function nav_click(element) { 
    $(".nav_middle_text").removeClass("selected"); 
    $(".nav_middle_text").addClass("notselected"); 
    $(element).removeClass("notselected"); 
    $(element).addClass("selected");   
}  
    $("#work").click(function() { 
    nav_click(this); 


    a1=1; 

    $("#top_section").animate({ 
     height:30 
    },450); 
    $("#bottom_section").animate({ 
     height:$("#grid").outerHeight(true) 
    }, 450); 
    $("#about_container").animate({ 
     marginTop:$("#about_container").outerHeight(true) *-1 
    }, 450); 
});