У меня есть два раскрывающихся меню, где параметры не получаются из базы данных.
Первый, позволяет пользователю выбирать категорию.
<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>
Варианты второго, зависят от выбора в первом выпадающем меню. Например, если пользователь выберет первый вариант, тогда появится второе раскрывающееся меню
<select name="items"> <option value="3">Smartphone</option> <option value="8">Charger</option> </select>
но когда пользователь меняет свое мнение или сначала выбирает второй вариант, тогда появится второе раскрывающееся меню
<select name="items"> <option value="1">Basketball</option> <option value="4">Volleyball</option> </select>
Мой вопрос: как я могу это достичь? Можно ли это сделать без использования базы данных?
Спасибо!
См. Ниже рабочий пример без использования базы данных .
Если вы хотите подключить его с помощью базы данных, да, это, безусловно, возможно. Рассмотрим эту таблицу:
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)
+----+------------+--------+ | 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 | +----+------------+--------+
Теперь, позвольте использовать 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>' ?>
Теперь <select>
готов. Благодаря функции onchange мы можем запустить событие AJAX, чтобы получить новый <select>
с данными, предоставленными родительским <select>
.
<select onchange="ajaxfunction(this.value)"> <!-- Options would have been initially populated here --> </select>
Теперь для функции jQuery вы можете сделать так:
<script type="text/javascript"> function ajaxfunction(parent) { $.ajax({ url: 'process.php?parent=' + parent; success: function(data) { $("#sub").html(data); } }); } </script>
В HTML после <select>
вам нужно указать другой вариант с id
как sub
.
<select onchange="ajaxfunction(this.value)"> <!-- Options would have been initially populated here --> </select> <select id="sub"></select>
Наконец, исходный код 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>' ?>
Вам просто нужно заменить это на PHP.
<?php $parent = array("Name", "Place", "Animals"); foreach ($parent as $id => $name) echo '<option value="s', $id,'">', $name,'</option>' ?>
И для 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>' ?>
Часть о базе данных не совсем понятна, так как выборки предположительно будут «перечислены» в некотором роде. Если у вас их в каком-то другом формате, это имеет смысл или если вы спрашиваете, нужен ли обратный вызов в базу данных (обратная postback
), ответ будет отрицательным. Но неясно, что вы имеете в виду.
Во всяком случае, вы можете использовать значение rel=""
(или data-items=""
), чтобы установить связь между одним, выбранным другим.
Например:
CSS
.cascade { display: none; }
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>
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); }); });
Вот еще один пример: в основном все данные находятся на странице в объекте, и вы используете его для отображения разных категорий FIDDLE
var categories = { "None":[{value:'3', text:'No cataegory selected'}], "First":[{value:'1', text:'Bmw'},{value:'2', text:'Benz'}], "Second":[{value:'4', text:'Playstation'},{value:'5', text:'Xbox'},{value:'10', text:'Wii'}], "Third":[{value:'6', text:'Dell'},{value:'7', text:'Acer'}], "Fourth":[{value:'8', text:'Audi'},{value:'9', text:'Datsun'}] }; function selectchange(){ var select = $('[name=items]'); select.empty(); $.each(categories[$(':selected', this).text()], function(){ select.append('<option value="'+this.value+'">'+this.text+'</option>'); }); } $(function(){ $('[name=category]').on('change', selectchange); });
2 Рабочий демонстрационный код для вашего кода :)
http://jsfiddle.net/PnSCL/2/ ИЛИ http://jsfiddle.net/PnSCL/
Это достижимо, но вам нужно установить связь между первым и вторым выбором.
Пожалуйста, загляните сюда: http://api.jquery.com/data/
Я добавил label
для отношений здесь http://jsfiddle.net/PnSCL/2/ [ http://www.w3schools.com/tags/tag_option.asp ]
Поведение Когда вы выберете first
вариант из select1, тогда он отобразит smartphone, chargers
противном случае, когда пользователь выберет second
из select1, он покажет baskeball, voleyball
в select2.
Надеюсь, это поможет, Пожалуйста, дайте мне знать, если я пропустил что-нибудь.
Демо 1
Код
$("#category").change(function() { if($(this).data('options') == undefined){ /*Taking an array of all options-2 and kind of embedding it on the select1*/ $(this).data('options',$('#select2 option').clone()); } var id = $(this).val(); var options = $(this).data('options').filter('[label=' + id + ']'); $('#select2').html(options); // alert(options); });
HTML
<select name="select1" id="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> <select name="items" id="select2"> <option value="3" label="1">Smartphone</option> <option value="8" label="1">Charger</option> <option value="1" label="2">Basketball</option> <option value="4" label="2">Volleyball</option> </select>
DEMO 2 * код *
$("#category").change(function() { if($(this).data('options') == undefined){ /*Taking an array of all options-2 and kind of embedding it on the select1*/ $(this).data('options',$('#select2 option').clone()); } var id = $(this).val(); var options = $(this).data('options').filter('[value=' + id + ']'); $('#select2').html(options); alert(options); });
HTML
<select name="select1" id="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> <select name="items" id="select2"> <option value="1">Smartphone</option> <option value="1">Charger</option> <option value="2">Basketball</option> <option value="2">Volleyball</option> </select>
Рабочее решение без использования базы данных:
HTML
<select name="country" id="country" onChange="showState();"> <option value="">Select Country</option> <option value="1">Pakistan</option> <option value="2">Saudi Arabia</option> </select> <div id="div_state"></div>
Jquery
<script> function showState() { $('body').css('cursor','wait'); var value = document.getElementById('country').value; var url = 'http://fiddle.jshell.net/rathoreahsan/WcKQ2/4/show/'; $.ajax({ type: "GET", url: url, data:{'country':value}, success:function(results) { $('#div_state').html(results); if (value == "1") { $('#PK').css('display','block') } else if (value == "2") { $('#SA').css('display','block') } $('body').css('cursor','default'); } }); } </script>
по<script> function showState() { $('body').css('cursor','wait'); var value = document.getElementById('country').value; var url = 'http://fiddle.jshell.net/rathoreahsan/WcKQ2/4/show/'; $.ajax({ type: "GET", url: url, data:{'country':value}, success:function(results) { $('#div_state').html(results); if (value == "1") { $('#PK').css('display','block') } else if (value == "2") { $('#SA').css('display','block') } $('body').css('cursor','default'); } }); } </script>
CSS:
#PK, #SA { display: none; }
SEE DEMO http://jsfiddle.net/rathoreahsan/WyLsh/
States Страница: http://fiddle.jshell.net/rathoreahsan/WcKQ2/4/show/
Просто предлагая, как вы можете это сделать –
<select name="country" id="country" onChange="showState();" > <option value="">Select Country</option> <option value="1">India</option> <option value="2">Nepal</option> </select>
Ваш сценарий –
<script type="text/javascript"> function showState( ) { var value = document.getElementById('country').value; var url = '<?php echo base_url ?>showstate.php'; $.ajax({ type: "GET", url: url, data:{'country':value}, success:function(results) { $('#div_state').html(results); } }); } </script>
Ваша страница showstate.php
php –
//INCLUDE CONNECTION file to for db query $type = $_GET['country']; //Your DB QUERIES //Your data on Get condition /*USING SWITCH-- switch ($type) { case "India": echo "I m in India"; break; case "Nepal": echo "I am in Nepal"; break;
Это загрузит контент в вашем div #div_state
. Вы также можете использовать Jquery. Для этого … я думаю, это поможет вам 🙂 и дайте мне знать, если у вас есть какие-либо запросы.
$(document).ready(function(){ $('#causes').change(function(){ $.getJSON("<?=URL.$param->module."/".$param->controller?>/getcourtcauses",{causeId: $(this).val()}, function(j){ var options = ''; if(j.length > 1 ) { for (var i = 0; i < j.length; i++) { options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>'; } if($('#subcauses').hide()) { $('#subcauses').show(); } $('#subcauses').attr('disabled', false); $("#subcauses").html(""); $("#subcauses").html(options); } else { $('#subcauses') .find('option') .remove() .end(); $('#subcauses').attr('disabled', true); } });