2009-07-27 11 views
1

Unter meinen vollständigen Code ist, dessen Grund, wählen Sie ein Land, und es zeigt, oder versteckt die richtige Form unter, Problem ist es ein FehlerWie loswerden jquery Fehler

„getState“ gibt nicht ist definiere

Nun bin ich insgesamt ein Noob an dieser aber wie debuggen Sie diese Art von Fehlern?

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

**** AKTUALISIERT CODE PARTIELL ARBEITET ****

<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

Sie können Firefox und Web-Entwickler oder Firebug-Erweiterungen verwenden, um Ihr Javascript zu debuggen. –

Antwort

3

Sie haben Ihre Funktion getState nicht benannt. Sie weiß nicht, wo Sie die Definition der Funktion "getState" finden sollen!

Sie haben auch nicht die Ereignisse richtig eingestellt ... sollte wie folgt aussehen:

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

Sie müssen möglicherweise auch die „onChange“ aus dem select-Tag zu entfernen, wie das andere Plakat erwähnt. In jQuery werden die Ereignisse nicht im HTML-Code festgelegt (ein Vorteil!). Sie binden die Ereignisse nur an Elemente, die auf ihrem Tag, ihrer ID oder ihrer CSS-Klasse basieren.

EDIT: ich bemerkt habe Sie verwenden name="country" statt id="country" oder class="country" ... das wird verhindern, dass Sie machen die richtige Auswahl

+0

Dies ist so irreführend, dass Sie es sofort löschen sollten. Und dann schlag dich. –

+0

Wie ist das möglicherweise irreführend? – Jason

+1

Weil Sie ihm sagen, dass er seinen Change Event Handler beim Laden der Seite aufrufen soll! Ich glaube nicht einmal, dass du die Frage verstehst ... –

3

Ich glaube, Sie nur die entfernen müssen onchange = "getState (this.value)" Attribut aus Wählen Sie tag aus, da die JavaScript-Funktion getState nicht mehr benötigt wird.

0

Sie sollten den Anruf zu getState in Ihrem select-Element entfernen. Außerdem habe ich festgestellt, dass Sie in Ihrem Skript auf die Namen der Elemente verweisen, als wären sie IDs. Sie sollten entweder Ihre Namensattribute in ID-Attribute ändern oder Selektoren wie "select[name='country']" verwenden.

+0

tun Sie bedeuten onchange = "getState (this.value)" wenn ja dann wie würde die Funktion aufgerufen werden, BTW Ich habe auf den Code von Jason umgeschaltet, wenn das einen Unterschied macht, aber ich bekomme immer noch Fehler – JasonDavis

+0

@DLH: "name" wurde deplaziert (oder war IE spezifisch, ich vergesse was) und sollte vermieden werden. Verwenden Sie ID-Attribute oder Klassennamen. –

+0

@jasondavis: Ja, ich meinte die onchange = "getState (this.value)". Das "$ ('# country'). Change (" "behandelt das onchange-Ereignis für Sie und die darin enthaltene Funktion wird jedes Mal ausgeführt, wenn das Element mit der ID" country "ein Änderungsereignis auslöst. @ScottSEA: tue ich nicht glaube, dass das Attribut name für das Element select veraltet ist http://www.w3.org/TR/xhtml1/#h-4.10 listet einige Elemente auf, für die es veraltet ist. – DLH

Verwandte Themen