2014-04-23 4 views
0

Ce code me donne l'erreur:Jquery en utilisant les fonctions

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('') 

La question est simple. Pourquoi?

+0

Oui, erreur stupide. Merci :) –

+1

Ces fonctions sont-elles des fonctions de déclaration ou d'expression? Pour que ces fonctions soient hissées, elles doivent être des déclarations de fonction. Donc, dans votre cas, déclarez vos fonctions en haut. –

+0

@AlexShilman 'oneTime = ->' est converti en une expression de fonction, le 'var oneTime' est hissé (bien sûr) mais l'affectation reste là où elle est. –

Répondre

1

Juste pour poster cette réponse si ce n'est pas encore clair. Le problème ici est que vos fonctions sont des expressions de fonctions. Ainsi, la déclaration est hissée au sommet, mais l'affectation arrive après votre appel. Donc, la fonction n'existe pas au moment de votre appel. Donc, dans votre cas soit faire une déclaration de fonction comme ceci:

function oneTime(){} 

ou si vous voulez garder vos fonctions est donc il suffit de déplacer toutes vos fonctions vers le haut, au-dessus de ce bloc de code:

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