使用jQuery和Ajax自动填充选择框(select)

前言:大家好,我是一名正在实习的前端实习生,今天在做项目的时候,遇到了一个没有遇到过的问题,就是从后台获取到的数据要自动填充到选择框内,并且选择框是个select级联(一个选择框改变,另一个也会改变,类似在淘宝买东西时的地址选择框)

类似这种效果

select级联遇到过,但是从后台获取数据处理select级联还是第一次。

找了篇优质的教程给萌新小白们(包括我)。

原址:https://remysharp.com/2007/01/20/auto-populating-select-boxes-using-jquery-ajax#the-goal

---------------------------------------------------------------------------------------------------------------------


如果你熟悉如何使用选择框进行分类或者级联的话,就像ebay在出售货品时那样,通常这需要大量的javascript语言来进行处理维护,但是jQuery可以添加少量的Ajax来极大的简化这个工作。

目标:

允许用户从选择框中选中一个类别,另一个选择框出现相应的数据(级联)。

前置条件:

1.最新版本的jQuery

2.对json有基本的理解(作者说:不要因为它你就放弃,其实它非常非常的简单。。。hh)

3.可以响应ajax的服务器端脚本(php什么的。ajax的请求地址)

工作原理:

当最高级别的选择框(级联的父选择框)更改时,会向后台发送一个ajax请求,向请求地址传送当前选中的<option>的value值,然后将从后台返回的数据循环填充到另一个选择框(级联的子选择框)

代码:

1.页面的HTML

2.服务器端代码(php)

3.jQuery和ajax

4.json代码


HTML:

<form action="/select_demo.php">
  <label for="ctlJob">Job Function:</label>
  <select name="id" id="ctlJob">
    <option value="1">Managers</option>
    <option value="2">Team Leaders</option>
    <option value="3">Developers</option>
  </select>
  <noscript>
    <input type="submit" name="action" value="Load Individuals" />
  </noscript>
  <label for="ctlPerson">Individual:</label>
  <select name="person_id" id="ctlPerson">
    <option value="1">Mark P</option>
    <option value="2">Andy Y</option>
    <option value="3">Richard B</option>
  </select>
<input type="submit" name="action" value="Book" />
</form>

服务器端代码:

<?php
if ($_GET['id'] == 1) {
  echo <<<HERE_DOC
    [ {"optionValue": 0, "optionDisplay": "Mark"}, {"optionValue":1, "optionDisplay": "Andy"}, {"optionValue":2, "optionDisplay": "Richard"}]
HERE_DOC;
} else if ($_GET['id'] == 2) {
  echo <<<HERE_DOC
    [{"optionValue":10, "optionDisplay": "Remy"}, {"optionValue":11, "optionDisplay": "Arif"}, {"optionValue":12, "optionDisplay": "JC"}]
HERE_DOC;
} else if ($_GET['id'] == 3) {
  echo <<<HERE_DOC
    [{"optionValue":20, "optionDisplay": "Aidan"}, {"optionValue":21, "optionDisplay":"Russell"}]
HERE_DOC;
}
?>


JSON返回数据(底下的数据是当传送的id=2时):

[
  {"optionValue":10, "optionDisplay": "Remy"},
  {"optionValue":11, "optionDisplay": "Arif"},
  {"optionValue":12, "optionDisplay": "JC"}
]


jQuery和Ajax:

<script src="jquery.js"></script>
<script>
$(function(){
  $("select#ctlJob").change(function(){
    $.getJSON("/select.php",{id: $(this).val()}, function(j){
      var options = '';
      for (var i = 0; i < j.length; i++) {
        options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
      }
      $("select#ctlPerson").html(options);
    })
  })
})
</script>
PS:这段ajax向后台传送了id数据,返回的数据循环填充到子选择框

-------------------------------------------------------------------------------------------------------------------------------------------------------

今天自己写的一小段:

$("#select_year").change(function(){
            $.post("url",{ 
                year:$(this).val()
            },function(result){
		var result=JSON.parse(result);
                var optionMonthCache='<option value="'+result[i].optionValue+'">'+result[i].optionDisplay+'</option>';
                $("#select_month").append(optionMonthCache);
            })
        })
选择某一年份,然后子选择框出现对应的月份

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值