#javascript
#javascript
Вопрос:
У меня есть требование При выборе значения выпадающего списка, оно должно фильтровать или удалять значения другого выпадающего списка, индекс которого всегда должен быть больше выбранного индекса первого выпадающего списка.
Пример: Первые выпадающие значения:
01:00
01:30
02:00 // suppose i select 02:00 here
02:30
03:00
03:30
04:00
04:30
05:00
05:30
Вторые значения Dropdonw (для выбранных 02:00 в приведенном выше выпадающем списке должны выглядеть следующим образом)
02:30
03:00
03:30
04:00
04:30
05:00
05:30
(Я использую C # с Asp.net здесь.)
Любой javascript для достижения вышеуказанного был бы высоко оценен
и используйте приведенный ниже скрипт, как предложил Салман
<body onload="select()">
<script language="javascript">
function select(){
var select1 = document.getElementById("ddlFrom");
var select2 = document.getElementById("ddlTo");
select1.onchange = function filterDDL() { // empty select2
while (select2.firstChild) {
select2.removeChild(select2.firstChild);
}
if (select1.selectedIndex == 0)
{
return;
}
for (var i = select1.selectedIndex; i < select1.options.length; i )
{
var o = document.createElement("option");
o.value = select1.options[i].value;
o.text = select1.options[i].text;
select2.appendChild(o);
}
}
}</script>
но не работает…пожалуйста, помогите с этим
Заранее спасибо
Комментарии:
1. Используете ли вы фреймворк javascript, такой как jQuery, или просто javascript? Это проще, если вы используете фреймворк.
Ответ №1:
Редактировать (используя jQuery для получения желаемых результатов):
<select id="one">
<option value="01:00">01:00</option>
<option value="01:30">01:30</option>
<option value="02:00">02:00</option>
<option value="02:30">02:30</option>
<option value="03:00">03:00</option>
<option value="03:30">03:30</option>
</select>
<select id="two"></select>
<script type="text/javascript">
$(function () {
$("#one").change(function (e) {
$("#two").empty();
var options =
$("#one option").filter(function(e){
return $(this).attr("value") > $("#one option:selected").val();
}).clone();
$("#two").append(options);
});
});
</script>
Комментарии:
1. не могли бы вы, пожалуйста, подробнее рассказать о том, как я мог бы связать отношение между этими двумя DDLS, спасибо
Ответ №2:
Ванильное решение на JavaScript и демо.
HTML
<select name="select1" id="select1">
<option value="">-- select an option --</option>
<option value="01:00">01:00</option>
<option value="01:30">01:30</option>
<option value="02:00">02:00</option>
<option value="02:30">02:30</option>
<option value="03:00">03:00</option>
<option value="03:30">03:30</option>
<option value="04:00">04:00</option>
<option value="04:30">04:30</option>
<option value="05:00">05:00</option>
<option value="05:30">05:30</option>
</select>
<select name="select2" id="select2">
</select>
JavaScript
// this function must be wrapped inside onload event
var select1 = document.getElementById("select1");
var select2 = document.getElementById("select2");
select1.onchange = function() {
// empty select2
while (select2.firstChild) {
select2.removeChild(select2.firstChild);
}
if (select1.selectedIndex == 0) {
return;
}
for (var i = select1.selectedIndex; i < select1.options.length; i ) {
var o = document.createElement("option");
o.value = select1.options[i].value;
o.text = select1.options[i].text;
select2.appendChild(o);
}
}
Комментарии:
1. итак, я думаю, что мне не следует снова указывать опции для выпадающего списка select2, и я обернул приведенный выше скрипт в функцию и поместил в body onload … все еще бесполезно
2. @Jam: сработала ли демонстрация на jsFiddle? (ссылка в самом верху моего ответа)
3. o.text у меня не сработал, но o.innerhtml сделал свое дело.
Ответ №3:
Для достижения этого существует несколько способов, каждый из которых может подойти для другого использования.
Фильтровать по значению
@Craig уже предложил это. Укажите значения параметров выпадающего списка. Когда что-то выбрано в первом, значения, меньшие или равные его значению, удаляются из второго выпадающего списка: http://jsfiddle.net/q8mLH /
Используя массив доступных пар
Создайте массив интересующих вас пар, затем, когда изменится select 1, обновите доступные параметры select2 на основе того, что определено в вашем массиве разрешенных пар: http://jsfiddle.net/AU6hq /
Пары AJAX база данных
Я не собираюсь приводить здесь пример, извините, но общая идея такова: вам нужно иметь несколько таблиц в вашей базе данных, скажем, «страны» и «города», где у каждой страны есть идентификатор, и у каждого города есть свой собственный уникальный идентификатор плюс идентификатор страны, в которой он находится. Вероятно, вы захотите отображать только города в выбранной стране.
Вы привязываете событие change() к выбранным округам и загружаете содержимое второго выбора с помощью вызова ajax, запрашивая базу данных для городов, которые находятся в выбранной стране.
Может быть больше, но мне не совсем хочется сегодня слишком много думать ;). В любом случае, я надеюсь, что это поможет.
[ПРАВИТЬ]
В моих примерах используется jQuery, я надеюсь, что это не проблема.