【问题标题】:How to append the value in option element如何在选项元素中附加值
【发布时间】:2019-03-01 20:11:11
【问题描述】:

我有一个名为 country 的表单域和一个名为 state 的域。假设我选择印度。这意味着我只想显示印度的哪些城市。假设我选择美国意味着我只想显示美国的哪些城市,从这里我写了选择查询这个和所有正确的,但我不能在状态字段中附加值..console.log(res);

这里我有正确的值,但我不能在状态字段中附加这个值

<script type="text/javascript">
function getState(country_id){
//console.log(country_id);
$.ajax({
    url:'getstate.php',
    type:'POST',
    data : { 'country_id' : country_id},
    success:function(data){
        var res=jQuery.parseJSON(data);// convert the json
        console.log(res);
        if(res['status']==1){

           var htmlString='';
           $.each( res['data'], function( key, value ) {
               htmlString+='<select>';
               htmlString+='<option>'+value.state_name+'</option>';

               htmlString+='</select>';
              //console.log( key + ": " + value.name );
            });
            $('#state').empty().append(htmlString);

        }

    },
});
};
</script>

getstate.php

<?php
include('dbconfig.php');
$country_id = $_POST['country_id'];
$sql = mysql_query("SELECT * FROM state WHERE country_id='$country_id'");
$count = mysql_num_rows($sql);
$return=array();
if($count > 0){
    while($row=mysql_fetch_assoc($sql)){
        $data[]=$row;
    }
    $return=array('status'=>1,'count'=>$count,'data'=>$data);
}else{
    $return=array('status'=>0,'count'=>$count,'data'=>'');
}
echo json_encode($return);
?>
<tr>
<th>COUNTRY</th>
<td>
    <select name="country" id="country" onchange="getState(this.value);">
        <option value="">Select Country</option>
        <?php
        include("dbconfig.php");
        $sql = mysql_query("SELECT * FROM country");
        while($row=mysql_fetch_assoc($sql)){
            ?>
            <option value="<?php echo $row['country_id'];?>"><?php echo $row['country_name'];?></option>
            <?php } ?>
        </select>
        &nbsp;&nbsp;<span id="country_err"></span>
    </td>
</tr>

<tr>
    <th>STATE</th>
    <td>
        <select name="state" id="state">
            <option value="">Select State</option>
        </select>
        &nbsp;&nbsp;<span id="state_err"></span>
    </td>
</tr>

【问题讨论】:

    标签: javascript php jquery ajax


    【解决方案1】:

    您在附加 ajax 响应的动态内容时遇到了一些错误。

    在您的以下代码中,您将列表(选择)添加到自身,这是错误的,并且您生成的选项没有值,只有您在此处执行的标签:

    $.each( res['data'], function( key, value ) {
                   htmlString+='<select>'; // WRONG since your target Element is the Select element
                   htmlString+='<option>'+value.state_name+'</option>';
    
                   htmlString+='</select>';
                  //console.log( key + ": " + value.name );
                });
                $('#state').empty().append(htmlString);
    

    现在你可以这样重写它:

        $.each( res['data'], function( key, value ) {                   
            htmlString += '<option value="'+value.state_id+'">';
            htmlString += value.state_name;
            htmlString += '</option>';
       });
       $('#state').empty().append(htmlString);
    

    【讨论】:

      【解决方案2】:

      当您清空$('#state').empty() 时,它会清空$('#state') 下拉列表中的所有选项,而不是完全清空状态元素。因此,您无需再次添加htmlString+='&lt;select&gt;';htmlString+='&lt;/select&gt;';

      试试下面的脚本,

      function getState(country_id){
      //console.log(country_id);
          $.ajax({
          url:'getstate.php',
          type:'POST',
          data : { 'country_id' : country_id},
          success:function(data){
              var res=jQuery.parseJSON(data);// convert the json
              console.log(res);
              if(res['status']==1){
      
                 var htmlString='<option value="">Select State</option>';
                 $.each( res['data'], function( key, value ) {
                     //htmlString+='<select>'; //  COMMENT THIS AND THIS IS WRONG
                     htmlString+='<option>'+value.state_name+'</option>'; // You missed to add "value" attribute. Please add if required 
      
                     //htmlString+='</select>'; //  COMMENT THIS AND THIS IS WRONG
                    //console.log( key + ": " + value.name );
                  });
                  $('#state').empty().append(htmlString);
      
              }
            },
          });
      };
      

      注意:- 您错过了为 state 选项添加“value”属性。需要的请补充

      【讨论】:

      • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
      • 谢谢@user6838959
      • @Machavity 感谢您的指导。是的,你是对的,我一定会提高帖子的质量。
      猜你喜欢
      • 2017-03-20
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 2020-09-11
      • 2021-11-27
      • 1970-01-01
      相关资源
      最近更新 更多