2009-07-27 10 views
1

Ci-dessous mon code complet, sa base, vous sélectionnez un pays et il montre ou cache la forme correcte en dessous, problème est qu'il donne une erreurComment se débarrasser de l'erreur jquery

« getState » est pas définir

Maintenant, je suis un noob total à cela, mais comment débugger ce genre d'erreurs?

<form method="post" name="form1"> 
    <select style="background-color: #ffffa0" name="country" onchange="getState(this.value)"> 
     <option>Select Country</option> 
     <option value="223">USA</option> 
     <option value="224">Canada</option> 
     <option value="225">England</option> 
     <option value="226">Ireland</option> 
    </select> 

    <select style="background-color: #ffffa0" name="state"> 
     <option>Select Country First</option> 
    </select> 

    <input type="text" name="othstate" value="" class="textBox" style="display: none;"> 
</form> 

<script> 
$(function() { 
    $('#country').change(function() { 
     var val = $(this).val(); 
     if (val == 223 || val == 224) { 
      $('#othstate').val('').hide(); 
      $.ajax({ 
       url: 'findState.php', 
       dataType: 'html', 
       data: { country : val }, 
       success: function(data) { 
        $('#state').html(data); 
       } 
      }); 
     } 
     else { 
      $('#state').val('').hide(); 
      $('#othstate').show(); 
     } 
    }); 
}); 
</script> 

**** CODE MISE À JOUR PARTIELLEMENT **** TRAVAIL

<script> 
$(document).ready(function() { 
    getState(); 
}); 

function getState() { 
    $('#country').change(function() {   
     var val = $(this).val(); 
    if (val == 223) { 
     $('#state').val('').show(); 
     $('#othstate').hide(); 
    }else { 
     $('#state').val('').hide(); 
     $('#othstate').show(); 
    } 
    }); 
} 
</script> 

<form method="post" name="form1"> 
    <select style="background-color: #ffffa0" name="country" id="country"> 
     <option>Select Country</option> 
     <option value="223" selected="selected">USA</option> 
     <option value="224">Canada</option> 
     <option value="225">England</option> 
     <option value="226">Ireland</option> 
    </select> 
<div id="state"> 
    <select style="background-color: #ffffa0" name="state" id="state"> 
     <option>Select State</option> 
     <option value="1">Florida</option> 
     <option value="2">New York</option> 
     <option value="3" selected="selected">Georgia</option> 
     <option value="4">California</option> 
    </select> 
</div> 
<div id="othstate"><input type="text" name="othstate" id="othstate" value="" class="textBox"></div> 
</form> 
+0

Vous pouvez utiliser les extensions firefox et web developer ou firebug pour déboguer votre javascript. –

Répondre

3

Vous n'avez pas nommé votre fonction getState .... elle ne sait pas où aller pour trouver la définition de la fonction "getState"!

aussi vous n'avez pas configuré correctement vos événements ... devrait ressembler à ceci:

<script> 
$(document).ready(function() { 
    getState(); 
}); 

function getState() { 
    $('#country').change(function() {   
     var val = $(this).val(); 
     if (val == 223 || val == 224) { 
     $('#othstate').val('').hide(); 
     $.ajax({ 
      url: 'findState.php', 
      dataType: 'html', 
      data: { country : val }, 
      success: function(data) { 
       $('#state').html(data); 
      } 
     }); 
    }else { 
     $('#state').val('').hide(); 
     $('#othstate').show(); 
    } 
    }); 
} 
</script> 

vous devrez peut-être supprimer le « onChange » de la balise select que l'autre affiche mentionnée. dans jQuery, vous ne définissez pas réellement les événements dans le HTML (un avantage!), vous liez simplement les événements aux éléments basés sur leur étiquette, id, ou classe CSS.

EDIT: J'ai remarqué que vous utilisez name="country" au lieu de id="country" ou class="country" ... cela vous évitera de faire des sélections appropriées

+0

Ceci est si trompeur que vous devriez le supprimer immédiatement. Et puis giflez-vous. –

+0

comment cela peut-il être trompeur? – Jason

+1

Parce que vous lui dites d'invoquer son gestionnaire d'événements change au chargement de la page! Je ne pense même pas que vous comprenez la question ... –

3

Je pense que vous avez juste besoin d'enlever le onchange = "getState (this.value)" attribut de votre select tag, car la fonction JavaScript getState n'est plus nécessaire/en cours d'utilisation.

0

Vous devez supprimer l'appel à getState dans votre élément de sélection. De plus, j'ai remarqué que dans votre script, vous référencez les noms des éléments comme s'ils étaient des ID. Vous devez soit modifier vos attributs de nom en attributs id, soit utiliser des sélecteurs tels que "select[name='country']".

+0

signifie enlever onchange = "getState (this.value)" si oui alors comment la fonction serait appelée, BTW je suis passé au code posté par Jason si cela fait une différence mais je reçois toujours des erreurs – JasonDavis

+0

@DLH: "nom" a été déprécié (ou était spécifique à IE, j'oublie lequel) et devrait être évité. Utilisez les attributs d'ID ou les noms de classe. –

+0

@jasondavis: Ouais je voulais dire onchange = "getState (this.value)". Le paramètre "$ ('# country'). Change (" gère l'événement onchange pour vous, et la fonction à l'intérieur de celui-ci s'exécute chaque fois que l'élément avec l'ID "country" déclenche un événement de changement @ScottSEA: Je ne sais pas croire que l'attribut name est obsolète pour l'élément select http://www.w3.org/TR/xhtml1/#h-4.10 liste certains éléments pour lesquels il est obsolète. – DLH

Questions connexes