[英]Populate Div by Drop Down
我正在尝试创建一个动态页面,该页面根据下拉列表的选择而变化。 因此,对于设置,我有两个下拉菜单。 描述它的最简单方法是“国家和地区”下拉列表。 我想要这样,以便在选择特定状态时,将在该状态下填充一个单独的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中。 用户应该能够继续选择选项并显示信息。
您需要考虑使用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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.