Ene*_*oma 11 html javascript php jquery
我有两个下拉菜单,其中的选项无法从数据库中获取.
第一个,让用户选择一个类别.
<select name="category">
<option value="0">None</option>
<option value="1">First</option>
<option value="2">Second</option>
<option value="3">Third</option>
<option value="4">Fourth</option>
</select>
Run Code Online (Sandbox Code Playgroud)
第二个选项取决于第一个下拉菜单中的选项.例如,如果用户选择First选项,则会显示第二个下拉列表
<select name="items">
<option value="3">Smartphone</option>
<option value="8">Charger</option>
</select>
Run Code Online (Sandbox Code Playgroud)
但是当用户改变主意,或者先选择第二个选项时,现在会显示第二个下拉菜单
<select name="items">
<option value="1">Basketball</option>
<option value="4">Volleyball</option>
</select>
Run Code Online (Sandbox Code Playgroud)
我的问题是如何实现这一目标?这可以在不使用数据库的情况下完成吗?
谢谢!
Pra*_*man 15
请参阅下文,以查看不使用数据库的工作示例.
如果你想使用数据库连接它,是的,它肯定是可能的.考虑一下这个表:
CREATE TABLE `contents` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR (255),
`parent` INT DEFAULT 0
);
INSERT INTO `contents` (`name`, `parent`) VALUES
('Names', 0),
('Places', 0),
('Animals', 0),
('Praveen', 1),
('Bill Gates', 1),
('Steve Jobs', 1),
('India', 2),
('New York', 2),
('London', 2),
('Singapore', 2),
('Cat', 3),
('Dog', 3),
('Tiger', 3),
('Deer', 3)
Run Code Online (Sandbox Code Playgroud)
+----+------------+--------+
| id | name | parent |
+----+------------+--------+
| 1 | Names | 0 |
| 2 | Places | 0 |
| 3 | Animals | 0 |
| 4 | Praveen | 1 |
| 5 | Bill Gates | 1 |
| 6 | Steve Jobs | 1 |
| 7 | India | 2 |
| 8 | New York | 2 |
| 9 | London | 2 |
| 10 | Singapore | 2 |
| 11 | Cat | 3 |
| 12 | Dog | 3 |
| 13 | Tiger | 3 |
| 14 | Deer | 3 |
+----+------------+--------+
Run Code Online (Sandbox Code Playgroud)
现在,让我们使用PHP首先填充初始<select>:
<?php
mysql_connect();
mysql_select_db("contents");
$result = mysql_query("SELECT * FROM `contents` WHERE `parent` = 0");
while(($data = mysql_fetch_array($result)) !== false)
echo '<option value="', $data['id'],'">', $data['name'],'</option>'
?>
Run Code Online (Sandbox Code Playgroud)
现在<select>准备好了.通过onchange函数,我们可以触发一个AJAX事件来获取<select>父项提供的数据<select>.
<select onchange="ajaxfunction(this.value)">
<!-- Options would have been initially populated here -->
</select>
Run Code Online (Sandbox Code Playgroud)
现在对于jQuery函数,您可以这样做:
<script type="text/javascript">
function ajaxfunction(parent)
{
$.ajax({
url: 'process.php?parent=' + parent;
success: function(data) {
$("#sub").html(data);
}
});
}
</script>
Run Code Online (Sandbox Code Playgroud)
在HTML之后<select>,你需要给另一个select用idas sub.
<select onchange="ajaxfunction(this.value)">
<!-- Options would have been initially populated here -->
</select>
<select id="sub"></select>
Run Code Online (Sandbox Code Playgroud)
最后的源代码process.php:
<?php
mysql_connect();
mysql_select_db("contents");
$result = mysql_query("SELECT * FROM `contents` WHERE `parent` = " . mysql_real_escape_string($_GET["parent"]));
while(($data = mysql_fetch_array($result)) !== false)
echo '<option value="', $data['id'],'">', $data['name'],'</option>'
?>
Run Code Online (Sandbox Code Playgroud)
你只需要在PHP中替换它.
<?php
$parent = array("Name", "Place", "Animals");
foreach ($parent as $id => $name)
echo '<option value="s', $id,'">', $name,'</option>'
?>
Run Code Online (Sandbox Code Playgroud)
对于process.php:
<?php
$parent = array("Name", "Place", "Animals");
$s0 = array("Praveen", "Bill Gates", "Steve Jobs");
foreach (${$_GET["parent"]} as $id => $name)
echo '<option value="', $data['id'],'">', $data['name'],'</option>'
?>
Run Code Online (Sandbox Code Playgroud)
关于数据库的部分并不是很清楚,因为选择可能会以某种方式被"列出".如果您使用其他格式,这是有道理的,或者如果您询问是否需要回调数据库(postback),答案是否定的.但目前尚不清楚你的意思.
无论如何,你可以使用一个rel=""值(或data-items="")来设置一个选择与另一个之间的关系.
例如:
CSS
.cascade {
display: none;
}
Run Code Online (Sandbox Code Playgroud)
HTML - 已修改
<select name="category">
<option value="0">None</option>
<option value="1" rel="accessories">Cellphones</option>
<option value="2" rel="sports">Sports</option>
<option value="3" rel="cars">Cars</option>
</select>
<select name="items" class="cascade">
<option value="3" class="accessories">Smartphone</option>
<option value="8" class="accessories">Charger</option>
<option value="1" class="sports">Basketball</option>
<option value="4" class="sports">Volleyball</option>
<option value="6" class="cars">Corvette</option>
<option value="2" class="cars">Monte Carloe</option>
</select>
Run Code Online (Sandbox Code Playgroud)
jQuery的
$(document).ready(function(){
var $cat = $('select[name=category]'),
$items = $('select[name=items]');
$cat.change(function(){
var $this = $(this).find(':selected'),
rel = $this.attr('rel'),
$set = $items.find('option.' + rel);
if ($set.size() < 0) {
$items.hide();
return;
}
$items.show().find('option').hide();
$set.show().first().prop('selected', true);
});
});
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/userdude/bY5LF/