我有一个日期选择器和一个具有不同交货时间的下拉菜单。基本上,当用户点击从周一到周五的任何一天时,下拉计时菜单有 4 个值。但是当用户点击 Sat 时,下拉计时菜单将有 3 个值。
以下是我的代码。 (请注意,我已经进行了更改,例如禁用星期日和过去的日期)
<script>
$( function() {
$("#datepicker").datepicker({
minDate: new Date(),
beforeShowDay: function(date) {
var day = date.getDay();
return [(day != 0), ''];
}
});
} );
</script>
<form name="checkout">
<input type="text" name="datepicker" id="datepicker" placeholder="Date of Delivery" onBlur="getWeekday();">
<div id="weekday">
<select name="time">
<option value="slot1">9am - 11am</option>
<option value="slot2">11am - 2pm</option>
<option value="slot3">2pm - 5pm</option>
<option value="slot4">7pm - 10pm</option>
</select>
</div>
<script>
function getWeekday() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
document.getElementById("weekday").innerHTML = xhttp.responseText;
}
};
xhttp.open("GET", "_weekday.php", true);
xhttp.send();
}
</script>
</form>
如您所见,在我的代码中,我有 3 个东西,即日期选择器、表单和 ajax 代码。
这正是 _weekday.php 中的内容
<select name="time">
<option value="slot1">9am - 11am</option>
<option value="slot2">11am - 2pm</option>
<option value="slot3">2pm - 5pm</option>
</select>
所以基本上,现在它所做的是,默认情况下,下拉菜单中有 4 个时间段,但是当用户单击日期选择器时,它将有 3 个时间段。
所以我的问题或者我需要的帮助是,我如何以这种方式实现它,只有在日期选择器上单击任何星期六时,ajax 才会激活并显示 3 个时隙而不是默认的 4 个时隙.但是,如果是其他任何一天,那么它仍然是4个时隙。
谢谢。
最佳答案
<script>
function getWeekday() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
var pickedDate = new Date($('#datepicker').val());
if(pickedDate.getDay() == 6){
//Write code for 3 option in select
}
else{
//Write code for 4 option in select
}
}
};
xhttp.open("GET", "_weekday.php", true);
xhttp.send();
}
</script>
你只需要使用 new Date().getDay() 来检查 datetimepicker 中的哪一天,如果这一天是 6,也就是星期六,那么只附加 3 个选项,否则对于所有工作日,所有其他 4 个选项
或者 最好的方法是将请求中的星期几传递给你的 php 页面,你可以在 php 中编写相应的日逻辑,也可以在查询参数中传递日期并检查 php 中的每个条件,这对安全观点有好处还有
关于javascript - 选择特定日期时在下拉列表中显示不同值的日期选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39221346/