2014-04-23 24 views
0

此代碼給我錯誤:jQuery的使用功能

TypeError: oneTime is not a function oneTime();

$ -> 
    value = $("#car_addition_price_type").val() 
    if value == "one_time" 
    oneTime() 
    else if value == "by_day" 
    byDay() 
    else 
    hideAll() 

    hideAll = -> 
    $('#by_day').hide() 
    $('#by_day input').val('') 
    $('#max_price').hide() 
    $('#max_price').val('') 

    byDay = -> 
    $("label[for='car_addition_price']").text("Cena/dzień") 
    $('#max_price').show() 
    $('#by_day').show() 

    oneTime = -> 
    $('#by_day').show() 
    $("label[for='car_addition_price']").text("Cena jednorazowa") 
    $('#max_price').hide() 
    $('#max_price input').val('') 

的問題很簡單。爲什麼?

+0

是的,愚蠢的錯誤。謝謝:) –

+1

這些函數是函數聲明還是表達式?爲了使這些函數被掛起,它們必須是函數聲明。所以在你的情況下,在上面聲明你的函數。 –

+0

@AlexShilman'oneTime = - >'被轉換爲一個函數表達式,'var oneTime'被掛起(當然),但是分配保持在原來的位置。 –

回答

1

所以只是發佈這個答案,如果它還不清楚。這裏的問題是你的函數是函數表達式。所以聲明會被提升到最高層,但分配發生在您的呼叫之後。所以這個函數在你的調用時不存在。所以你的情況要麼使它成爲一個函數聲明,如下所示:

function oneTime(){} 

,或者如果你想保持你的功能是,那麼只要將所有的功能在上面,這個代碼塊以上:

if value == "one_time" 
oneTime() 
else if value == "by_day" 
    byDay() 
else 
    hideAll()