2017-06-27 52 views
0

在網頁上,我有兩個組合框。第一個從上午9點到晚上9點的開始時間(小時)。第二個從上午10點到下午12點結束。從屬組合框

用戶選擇開始時間和結束時間。

我希望能夠讓第二個組合框僅顯示晚於第一個框中選擇的那個時間的那些時間。

例如,如果用戶選擇了2pm的開始時間,則第二個組合框僅顯示包括下午3點之後的時間。

我絕對不知道如何去做這件事,我甚至不知道它可以做到。

這是我現在的代碼。

<div class="form-group"> 
<label class="control-label col-sm-3" for="bookingTime">Times of your booking</label> 
<div class="col-sm-4"> 
<select class="form-control" name="bookingStartTime" id="bookingStartTime"> 
    <option>Select start time</option> 
    <option value="9am">9 am</option> 
    <option value="10am">10 am</option> 
    <option value="11am">11 am</option> 
    <option value="12pm">12 pm</option> 
    <option value="1pm">1 pm</option> 
    <option value="2pm">2 pm</option> 
    <option value="3pm">3 pm</option> 
    <option value="4pm">4 pm</option> 
    <option value="5pm">5 pm</option> 
    <option value="6pm">6 pm</option> 
    <option value="7pm">7 pm</option> 
    <option value="8pm">8 pm</option> 
    <option value="9pm">9 pm</option> 
</select> 
</div> 
<!-- /#bookingStartTime --> 

<div class="col-sm-offset-1 col-sm-4"> 
<select class="form-control" name="bookingEndTime" id="bookingEndTime"> 
    <option>Select finish time</option> 
    <option value="10am">10 am</option> 
    <option value="11am">11 am</option> 
    <option value="12pm">12 pm</option> 
    <option value="1pm">1 pm</option> 
    <option value="2pm">2 pm</option> 
    <option value="3pm">3 pm</option> 
    <option value="4pm">4 pm</option> 
    <option value="5pm">5 pm</option> 
    <option value="6pm">6 pm</option> 
    <option value="7pm">7 pm</option> 
    <option value="8pm">8 pm</option> 
    <option value="9pm">9 pm</option> 
    <option value="10pm">10 pm</option> 
    <option value="11pm">11 pm</option> 
    <option value="12pm">12 pm</option> 
</select> 
</div>   
<!-- /bookingEndTime --> 
+0

這是可以做到。請包括任何相關的html以及您在問題中所做的任何嘗試。 – Steve

+0

我看到你對Stack Overflow比較陌生。如果您認爲答案有助於解決您的問題,請點擊綠色複選標記將其標記爲「已接受」。這有助於將重點放在仍然沒有答案的舊問題上。 – Matt

回答

3

任何事情都是可能的軟件的神奇世界,不僅能不能做到,但也有實現它的許多不同的方式。

這裏是一個粗略的例子: https://jsfiddle.net/n6fm39ww/

HTML

<select name="start_time"> 
</select> 

<select name="end_time"> 
    <option value="default">Pick a start time</option> 
</select> 

JS

// Add each option to start_times 
for (var hour = 9; hour <= 21; hour++) { 
    var option = "<option value='"+hour+"'>"+hour+"</option>"; 
    $('[name="start_time"]').append(option); 
} 

// When the start time is changed, set the end time 
$('[name="start_time"]').on('change', function() { 
    // This is the start time chosen 
    var start_time = $(this).val(); 
    // Remove the default option 
    $('[name="end_time"]').find('option').remove(); 
    // Add options after the start time 
    for (var hour = parseInt(start_time) + 1; hour <= 24; hour++) { 
     var option = "<option value='"+hour+"'>"+hour+"</option>"; 
    $('[name="end_time"]').append(option); 
    } 
}); 
+0

這似乎非常接近。我必須使用24小時制嗎?還是可以在am/pm後綴中使用12小時?如果可以的話,怎麼樣? – MartySmartyPants

+0

如果您想使用12小時的時間,然後更改選項上顯示的文本。你可以看到我在選項值和文本中都使用變量'hour',所以把文本改爲任何你想要的。使用24小時的時間作爲值使得它更容易計算。 – Matt

+0

我發現了一個腳本,將24小時變成了12小時,可以讓腳本和你的第一個組合框一起工作,但不是第二個。在經歷了最後幾天的嘗試後,我確定你是對的,使用24小時IS更容易計算。非常感謝您的幫助。 – MartySmartyPants

0

請務必在將來提供代碼示例。

這裏是如何做到這一點的例子:https://jsfiddle.net/c6432wee/


假設我們有兩個選擇。

<select id="startTime"> <option value="na">Please Select A Time</option> <option value=1>1:00PM</option> </select>

<select id="endTime"> <option value="na">Please Select A Time</option> <option value=1>1:00PM</option> </select>

我們通過設置隱藏

$('#endTime').css('display', 'none');

然後我們註冊事件處理結束時啓動。每當它發生變化時,我們都會查看它的值是否與我們的默認佔位符不同。

$('#startTime').change(function() { 
    if($('#startTime').val() !== 'na') { 
     $('#endTime').css('display', 'initial'); 
    } 
    }); 

如果是,我們將endTime設置回其初始顯示狀態。

$('#endTime').css('display', 'initial');

+0

你在jsfiddle上的例子似乎將第一個組合框選項複製到第二個。 – MartySmartyPants

+0

@MartySmartyPants嘗試更改第二個框中的選項 – dotKn0ck