我有两个下拉框。我想在第一个下拉框中填充选择的第二个下拉框。我的值是从数据库中检索。这可能不使用PHP或我需要中间ajax和php文件从第一个下拉列表和填充值文件获取值。或者这可以不使用PHP我的意思是只使用Jquery。请给我一些提示。
假设我有2个国家/地区。首先是印度,第二是美国。在第一个下拉列表中,我选择国家/地区,如果选择第一个下拉列表,则选择第二个下拉列表填充其各自的状态。
答案 0 :(得分:1)
如果您将数据编码为JSON格式,那么您可以执行以下操作:
代表HTML:
<select name='country' id='country'>
<option value='india'>India</option>
<option value='usa'>USA</option>
</select>
<select name='dates' id='dates'>
</select>
jQuery的:
data = {
india: ['2011-03-11','2010-02-01'],
usa: ['2006-03-11','2009-02-01']
}
$('#country').change(function(){
var dateopts = ''
$.each(data[$(this).val()],function(i,v){
dateopts += "<option value='"+v+"'>"+v+"</option>"
})
$('#dates').html(dateopts)
})
当国家/地区发生变化时,将构建并填充第二个选择框的选项。
请参阅此处的工作示例:http://jsfiddle.net/xHxcD/
上述方法要求使用初始页面请求将所有数据发送到客户端。如果您有大量数据,最好通过AJAX接收数据。最简单的方法是在PHP中使用与客户端相同的数据结构构建一个对象,然后使用json_encode将其转换为JSON字符串并将其回显。
将此信息读入您的客户端将非常简单:
$.ajax('myJsonData.php?country=india',function(jsonData){ data.india = jsonData })
答案 1 :(得分:0)
你可以这样做。如果您不想使用ajax,只需将每个选项加载到一个对象中。然后,当您从选择#1中选择某些内容时,使用来自对象的相关数据数组填充#2。
如果我这样做,我不会用ajax来做,除非有数据TON。
答案 2 :(得分:0)
让我们举一个简单的例子,我将它用于你想要的相同目的,它完美地运作。
这是国家/地区下拉列表:
<?php
$countrylist=mysql_query("SELECT * FROM country ORDER BY name ASC");
echo "<select name='country' id='country' onchange=\"reload(this.form)\" title='Country e:g; United Kingdom,Pakistan'><option value='0'>Select Country</option>";
while($clist=mysql_fetch_array($countrylist))
{
echo "<option value='$clist[Name]'>$clist[Name]</option>"."<br/>";
}
echo "</select>";
?>
这是区域下拉列表:
<select name="region" id="region" ></select>
现在创建一个名为crlist.js的单独文件,并将其包含在具有以下代码的页面中:
<script type="text/javascript" src="crlist.js"> </script>
crlist.js的代码:
var request = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
request = false;
}
}
@end @*/
function fillSelect(country,path) {
var url = path+"crlist.php?country=" + country;
request.open("GET", url, true);
request.onreadystatechange = go;
request.send(null);
}
function go() {
if (request.readyState == 4) {
//if (request.status == 200) {
var response = request.responseText;
var list=document.getElementById("region");
for (i = list.length - 1; i>=0; i--) {
list.remove(i);
}
var records=response.split('|');
for (i=1; i<records.length; i++) {
//alert("rcord="+records[i]);
var record=records[i].split('*');
var region=record[0];
//alert("region="+region);
var regionid=record[1];
//alert("regionid="+regionid);
var x=document.createElement('option');
//var y=document.createTextNode(region);
x.text=region;
//x.value=region;
//alert(x.text);
//x.appendChild(y);
//list.appendChild(x);
list.options.add(x);
}
//}
}
}
function initCs(path) {
if (!request && typeof XMLHttpRequest != 'undefined') {
request = new XMLHttpRequest();
}
var country=document.getElementById('country');
country.onchange=function() {
if(this.value!="Select") {
var list=document.getElementById("region");
for (i = list.length - 1; i>=0; i--) {
list.remove(i);
}
//while (list.childNodes[0]) {
//list.removeChild(list.childNodes[0]);
//}
}
fillSelect(this.value,path);
//alert(this.value);
}
//fillSelect(country.value);
}
现在创建一个名为crlist.php的单独文件。
crlist.php的代码:
<?php
require_once 'yourconfigfile.php';
$cname = $_GET['country'];
$query="select ID,Name from city where CountryCode=(select code from country where name='$cname') Order By Name ASC";
$res = mysql_query($query) or die(mysql_error());
while($region = mysql_fetch_array($res)){
echo "<option value='".$region['Name']."'>".$region['Name']."</option>";
}
?>
现在在有下拉列表的页面上添加以下脚本:
<script type="text/javascript" src="crlist.js"> </script>
<script>
$(document).ready(function() {
initCs("");
});
</script>
这是我自己的脚本,我假设你已经创建了国家和地区表。但是你需要根据你的数据库结构调整查询和上面的代码。
参考我的回答:Cascade Dropdown List using jQuery/PHP
希望这有帮助。
答案 3 :(得分:0)
是的,你可以在不使用php的情况下完成。为此,您需要在Javascript数组中分配两个不同的状态列表,并根据选择只更改另一个选择框中的选项。就这么简单。
如果您使用数据库存储状态,则可以在加载页面时使用服务器端脚本语言分配javascript数组。
但除非你的数据非常少,否则不要这样做。在您的情况下,您只有2个国家/地区,因此您可以继续使用它。