如何根据另一个下拉列表隐藏和显示下拉列表值

时间:2016-07-01 23:44:18

标签: javascript html dropdownlistfor

我正试图使用​​另一个来操纵下拉列表的值。以下是完整的代码。这些值基本上只是小时的时间。

            <!-- start -->
     <div id="start">
        <p>Start time</p>
        <select name="select1" id="select1" >
            <option value="8:00">8:00</option>
            <option value="8:30">8:30</option>
            <option value="9:00">9:00</option>
            <option value="9:30">9:30</option>
            <option value="10:00">10:00</option>
            <option value="10:30">10:30</option>
            <option value="11:00">11:00</option>
            <option value="11:30">11:30</option>
            <option value="12:00">12:00</option>
            <option value="12:30">12:30</option>
            <option value="13:00">13:00</option>
            <option value="13:30">13:30</option>
            <option value="14:00">14:00</option>
            <option value="14:30">14:30</option>
            <option value="15:00">15:00</option>
            <option value="15:30">15:30</option>
            <option value="16:00">16:00</option>
            <option value="16:30">16:30</option>
            <option value="17:00">17:00</option>
            <option value="17:30">17:30</option>
            <option value="18:00">18:00</option>
            <option value="18:30">18:30</option>
            <option value="19:00">19:00</option>
            <option value="19:30">19:30</option>
            <option value="20:00">20:00</option>
            <option value="20:30">20:30</option>
            <option value="21:00">21:00</option>
            <option value="21:30">21:30</option>
        </select>
    </div>


            <!--end time -->
    <div id="end">
        <p>End time</p>
        <select name="select2" id="select2">
            <option value="8:30">8:30</option>
            <option value="9:00">9:00</option>
            <option value="9:30">9:30</option>
            <option value="10:00">10:00</option>
            <option value="10:30">10:30</option>
            <option value="11:00">11:00</option>
            <option value="11:30">11:30</option>
            <option value="12:00">12:00</option>
            <option value="12:30">12:30</option>
            <option value="13:00">13:00</option>
            <option value="13:30">13:30</option>
            <option value="14:00">14:00</option>
            <option value="14:30">14:30</option>
            <option value="15:00">15:00</option>
            <option value="15:30">15:30</option>
            <option value="16:00">16:00</option>
            <option value="16:30">16:30</option>
            <option value="17:00">17:00</option>
            <option value="17:30">17:30</option>
            <option value="18:00">18:00</option>
            <option value="18:30">18:30</option>
            <option value="19:00">19:00</option>
            <option value="19:30">19:30</option>
            <option value="20:00">20:00</option>
            <option value="20:30">20:30</option>
            <option value="21:00">21:00</option>
            <option value="21:30">21:30</option>
            <option value="22:00">22:00</option>
         </select>

我的目标是确保名为endtime的下拉列表根据我在名为starttime的下拉列表中选择的内容更改其值。例如:如果我在开始时间选择10:00小时的值,则结束时间列表应仅在10:30之后显示小时并在10:00之前隐藏小时。所以我基本上希望starttime始终在endtime之前。

还应该有最长2小时的时间限制。例如:如果我在开始时间选择10:00hrs,我只能在结束时间列表中选择截至12:00及以下的值。

由于我是新手,我似乎无法弄清楚如何使用纯JavaScript。

3 个答案:

答案 0 :(得分:0)

我不会对此有所了解,因为它更像是一个如何编码而不是我已经尝试过所有问题。

我会保留您的开始时间,但会根据开始时间选择动态添加结束时间。

  1. 检查开始时间
  2. 关于更改事件运行功能
  3. 在函数内获取开始时间值并创建一个最多12个循环
  4. 在此功能中,动态地将选项添加到已创建的选择下拉列表
  5. 看看here

答案 1 :(得分:0)

此功能可根据您的要求为您的结束时间下拉列表生成时间阵列。

现在,您需要做的就是将生成的数组从myFunc附加到endTime下拉列表。

<script> 
function myFunc(value){
                    // parse the value "10:30" to individual hour & minutes
                    var startHour = parseInt(value.split(':')[0]);
                    var startMinute =  parseInt(value.split(':')[1]);

                    var endTimeList = [];
                    var newArrayCount = 0;

                    for(var i = startHour; i <= startHour + 2; i++){

                        endTimeList[newArrayCount] = i + ":00";
                        newArrayCount++;
                        endTimeList[newArrayCount] = i + ":30";
                        newArrayCount++;
                    }

                    endTimeList.shift(); // remove first value

                    // remove first or last value from array based on minute timing 
                    if(startMinute != 0){
                        endTimeList.shift();
                    }else{
                        endTimeList.pop();
                    }

                    console.log(endTimeList.toString());
                }
</script>

<div id="start">
    <p>Start time</p>
    <select name="select1" id="select1" onChange="myFunc(this.value)">
        <option value="8:00">8:00</option>
        <option value="8:30">8:30</option>
        <option value="9:00">9:00</option>
        <option value="9:30">9:30</option>
        <option value="10:00">10:00</option>
        <option value="10:30">10:30</option>
        <option value="11:00">11:00</option>
        <option value="11:30">11:30</option>
        <option value="12:00">12:00</option>
        <option value="12:30">12:30</option>
        <option value="13:00">13:00</option>
        <option value="13:30">13:30</option>
        <option value="14:00">14:00</option>
        <option value="14:30">14:30</option>
        <option value="15:00">15:00</option>
        <option value="15:30">15:30</option>
        <option value="16:00">16:00</option>
        <option value="16:30">16:30</option>
        <option value="17:00">17:00</option>
        <option value="17:30">17:30</option>
        <option value="18:00">18:00</option>
        <option value="18:30">18:30</option>
        <option value="19:00">19:00</option>
        <option value="19:30">19:30</option>
        <option value="20:00">20:00</option>
        <option value="20:30">20:30</option>
        <option value="21:00">21:00</option>
        <option value="21:30">21:30</option>
    </select>
</div>


        <!--end time -->
<div id="end">
    <p>End time</p>
    <select name="select2" id="select2">
        <option value="8:30">8:30</option>
        <option value="9:00">9:00</option>
        <option value="9:30">9:30</option>
        <option value="10:00">10:00</option>
        <option value="10:30">10:30</option>
        <option value="11:00">11:00</option>
        <option value="11:30">11:30</option>
        <option value="12:00">12:00</option>
        <option value="12:30">12:30</option>
        <option value="13:00">13:00</option>
        <option value="13:30">13:30</option>
        <option value="14:00">14:00</option>
        <option value="14:30">14:30</option>
        <option value="15:00">15:00</option>
        <option value="15:30">15:30</option>
        <option value="16:00">16:00</option>
        <option value="16:30">16:30</option>
        <option value="17:00">17:00</option>
        <option value="17:30">17:30</option>
        <option value="18:00">18:00</option>
        <option value="18:30">18:30</option>
        <option value="19:00">19:00</option>
        <option value="19:30">19:30</option>
        <option value="20:00">20:00</option>
        <option value="20:30">20:30</option>
        <option value="21:00">21:00</option>
        <option value="21:30">21:30</option>
        <option value="22:00">22:00</option>
     </select>

注意:您将需要处理另外两种情况:

1)。当用户选择开始时间为&#34; 22:00&#34;或&#34; 21:00&#34;等

2)。如果用户想要选择开始时间为&#34; 8:00&#34;(onChange没有被触发)该怎么办

答案 2 :(得分:0)

我是董事会

<html><head><script>
var times = ["8:00","8:30","9:00","9:30","10:00","10:30","11:00",
 "11:30","12:00","12:30","13:00","13:30","14:00","14:30","15:00",
 "15:30","16:00","16:30","17:00","17:30","18:00","18:30","19:00",
 "19:30","20:00","20:30","21:00","21:30","22:00"];
var start,end;
function onLoad(){
 start = document.getElementById('start');
 end = document.getElementById('end');
 for(var i=0;i<times.length-1;i+=1)
  start.innerHTML += '<option value="'+times[i]+'">'+times[i]+'</option>';
 for(var i=1;i<times.length;i+=1)
  end.innerHTML += '<option value="'+times[i]+'">'+times[i]+'</option>';
 end.value = '22:00';
}
function buildStart(){
 var val = start.value;
 start.innerHTML = '';
 for(var i=0;i<times.indexOf(end.value);i++)
  start.innerHTML += '<option value="'+times[i]+'">'+times[i]+'</option>';
 start.value = val;
}
function buildEnd(){
 var val = end.value;
 end.innerHTML = '';
 for(var i=times.indexOf(start.value)+1;i<times.length;i++)
  end.innerHTML += '<option value="'+times[i]+'">'+times[i]+'</option>';
 end.value = val;
}
</script></head><body onload="onLoad();">
<select id="start" onchange="buildEnd();"></select>
<select id="end" onchange="buildStart();"></select>
</body></html>

总结一下:

1)您希望使用脚本构建更大的选择,而不是手动。

2)如果您将值保存在此代码中的数组中,则可以轻松检查一个选择的值是否小于/大于另一个。

3)这个问题似乎很懒散。

~~硬模式~~

使用 this 删除顶部的丑陋数组:

var times = [];
for(var i=8;i<22.5;i+=0.5)
 times.push((i.toFixed(2)+'').split('.').join(':'));