通过下拉填充Div

时间:2013-10-17 01:39:43

标签: javascript php jquery drop-down-menu

我正在尝试创建一个根据下拉选项更改的动态页面。所以对于设置,我有两个Drop Downs。描述它的最简单方法是国家和州下拉。我喜欢它,以便在选择特定状态时,会在单独的div中填充有关该状态的信息。现在这只是一个例子,但它正是我正在寻找的。我已经使用一些简单的Javascript和数组设置了两个下拉列表来填充它们。

<script type="text/javascript">
var postState = '';
var postCountry = '';

var state = '\
US:AK:Alaska|\
US:AL:Alabama|\
US:AR:Arkansas|\
';

var country = '\
US:United States|\
';

function populateCountry(defaultCountry) {
  if ( postCountry != '' ) {
    defaultCountry = postCountry;
  }
  var countryLineArray = country.split('|');  // Split into lines
  var selObj = document.getElementById('countrySelect');
  selObj.options[0] = new Option('Select Country','');
  selObj.selectedIndex = 0;
  for (var loop = 0; loop < countryLineArray.length; loop++) {
    lineArray = countryLineArray[loop].split(':');
    countryCode  = TrimString(lineArray[0]);
    countryName  = TrimString(lineArray[1]);
    if ( countryCode != '' ) {
      selObj.options[loop + 1] = new Option(countryName, countryCode);
    }
    if ( defaultCountry == countryCode ) {
      selObj.selectedIndex = loop + 1;
    }
  }
}

function populateState() {
  var selObj = document.getElementById('stateSelect');
  var foundState = false;
  // Empty options just in case new drop down is shorter
  if ( selObj.type == 'select-one' ) {
    for (var i = 0; i < selObj.options.length; i++) {
      selObj.options[i] = null;
    }
    selObj.options[0] = new Option('Select State','');
    selObj.selectedIndex = 0;
  }
  // Populate the drop down with states from the selected country
  var stateLineArray = state.split("|");  // Split into lines
  var optionCntr = 1;
  for (var loop = 0; loop < stateLineArray.length; loop++) {

    lineArray = stateLineArray[loop].split(":");
    countryCode  = TrimString(lineArray[0]);
    stateCode    = TrimString(lineArray[1]);
    stateName    = TrimString(lineArray[2]);
  if (document.getElementById('countrySelect').value == countryCode && countryCode != '' ) {
    // If it's a input element, change it to a select
      if ( selObj.type == 'text' ) {
        parentObj = document.getElementById('stateSelect').parentNode;
        parentObj.removeChild(selObj);
        var inputSel = document.createElement("SELECT");
        inputSel.setAttribute("name","state");
        inputSel.setAttribute("id","stateSelect");
        parentObj.appendChild(inputSel) ;
        selObj = document.getElementById('stateSelect');
        selObj.options[0] = new Option('Select State','');
        selObj.selectedIndex = 0;
      }
      if ( stateCode != '' ) {
        selObj.options[optionCntr] = new Option(stateName, stateCode);
      }
      // See if it's selected from a previous post
      if ( stateCode == postState && countryCode == postCountry ) {
        selObj.selectedIndex = optionCntr;
      }
      foundState = true;
      optionCntr++
    }
  }
function initCountry(country) {
  populateCountry(country);
  populateState();
}
</script>

我对Javascript不是很好,所以这就是我所拥有的。如果有更简单的方法来填充下拉菜单,我就是全力以赴。我在PHP方面很有经验,所以我希望有一些交叉来显示内容。

重申一下,我有两个下降。选择1中的选项,并在2中选择不同的选项。单击2中的选项,信息将显示在下面的DIV中。用户应该能够继续选择选项并显示信息。

1 个答案:

答案 0 :(得分:0)

您需要考虑使用AJAX执行此操作。实际上,数据集太大,无法在本地存储所有数据集。要用jQuery来写我的回答,为了教学,我会过分简化。首先,我们需要一个函数来确定状态何时发生变化(请注意,您可以编写一个汇总函数来完成所有操作,但我认为您还没有达到该级别)

function changeDrop1() {
    var country = $('#mydrop1').val();
    $.getJSON('/your/ajax/file/?country=' + country, function(data) {
         $('#mydrop2').empty();
         $.each( data, function( key, val ) {
            var opt = $('<option/>', {'value':key }).text(val);
            $('#mydrop2').append(opt);
         });
    });
}

我的假设是你的AJAX将轮询国家传递返回一个像这样的JSON对象

{ "AL":"Alabama", "AK":"Alaska" }

当您的脚本通过国家/地区时,您将以此格式返回状态,您可以使用每个状态迭代它们并填充下拉列表2.此处的最后一部分是如何触发它。在您的页面中,您将添加

$(document).ready(function() {
     $('#mydrop1').change( changeDrop1(); });
});

现在,当你的下拉值发生变化时,你会触发AJAX来填充下拉列表2.我希望这一切都有意义。您可以重复使用相同的技术来检查下拉列表2并填充div。

相关问题