2009-07-27 105 views
1

下面是我完整的代码,它的基本的,你选择一个国家和它显示或隐藏下方的正确形式,问题是,它提供了一个错误如何摆脱jQuery的错误

“的getState”不定义

现在我是一个总noob在这,但你怎么调试这些类型的错误?

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

****更新的代码 - 部分WORKING ****

<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

您可以使用firefox和web developer或firebug扩展来调试您的javascript。 – 2009-07-27 19:34:21

回答

3

你还没有命名你的函数getState ....它不知道去哪里找到函数“getState”的定义!

你也没有设置你的事件正确......应该是这样的:

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

可能还需要与其他海报提到从select标签删除“的onChange”。在jQuery中,你并没有真正在HTML中设置事件(一个好处!),你只需将事件绑定到基于它们的标记,id或CSS类的元素上。

编辑:我你使用name="country"代替id="country"class="country"注意到......这将阻止你做正确的选择

+0

这太让人误解了,应该立即删除它。然后拍打你自己。 – 2009-07-27 19:47:22

+0

这可能是误导? – Jason 2009-07-27 19:47:53

3

我认为你需要从删除的onchange = “的getState(THIS.VALUE)”属性您选择标记,因为getState JavaScript函数不再需要/正在使用。

0

您应该删除调用的getState您的选择元素。另外,我注意到在你的脚本中你引用了元素的名字,就好像它们是ID一样。您应该将您的名称属性更改为ID属性,或使用选择器,如"select[name='country']"