根据另一个字段自动更改字段 javascript
Auto changing field javascript based on another field
我正在使用这个 datepicker and this timepicker。我想开发 JS 代码来确定用户是否在日期选择器上选择了当前日期,如果是这样,这将触发时间选择器的一个函数,该函数将禁用实际时间之前的所有时间。我是 JavaScript 的新手,所以我只了解了这么多。
HTML:
<input id="datemax" placeholder="Enter the date of incident" type="text"/>
<input id="timemax" placeholder="Enter the time of incident" type="text"/>
禁用当前时间之前的时间的功能,该功能有效但无论选择什么日期都将保持不变:
function getCurrentTime(date) {
var hours = date.getHours();
var minutes = date.getMinutes();
var ampm = hours >= 12 ? 'pm' : 'am';
hours = hours % 12;
hours = hours ? hours : 12;
minutes = minutes < 10 ? '0'+minutes : minutes;
return hours + ':' + minutes + ' ' + ampm;
}
var timesAvailable = {
'timeFormat': 'h:i A',
'disableTimeRanges': [[getCurrentTime(new Date()), '12am']]
};
$('#timemax').timepicker(timesAvailable);
我想知道将上述 JS 函数实现到我的表单中需要什么。我假设需要开发第二个函数,并且需要使用 var datemax = document.getElementById("datemax").value;从日期字段调用值。
我在这里开发了一些不完整的伪代码:
function datetimeSelect{
var currentDate = new Date();
var day = currentDate.getDate();
var month = currentDate.getMonth();
var year = currentDate.getFullYear();
var datemax = document.getElementById("datemax").value;
if (datemax === currentDate){
//activate
'disableTimeRanges': [[getCurrentTime(new Date()), '12am']] //Can't select any time before now, greyed out
return false;
}
else //datemax does not equal to currentDate
{
$('#timeMax').timepicker();//Standard Datepicker and any time can be selected
return true;
{
因此,例如,如果选择的日期不是今天,时间选择器将 return 使用其默认功能,不会显示任何灰色时间。
如果我没理解错的话,你只需要使用jquery change function。
$("elementId").change(function() {
if(selectedDate == currentDate){
//disable times previous to the actual time
}
else{
}
});
你对这个问题的专注是值得注意的,但在目前的情况下很难找到任何解决方案,我在解释后提出了一个,试试看是否适合你的需要。
如果您有一个回调日期选择器插件,该插件在用户 select 说一个日期之后被调用,例如
datepickr('#datemax',{onSelect:'someFn'});
然后
function someFn()
{
alert('somethings changed');
var timesAvailable = {
'timeFormat': 'h:i A',
'disableTimeRanges': [['12am', getCurrentTime(new Date())]]
};
$('#timemax').timepicker(timesAvailable);
}
这本来很容易,但由于情况并非如此,您可能需要寻找其他 alternatives.Note 如果您喜欢这个 select 某个日期
$("#userInput").change(function(){
//same above code
});
那是行不通的,因为当您通过代码更改值时,事件不会触发,这正是该插件的作用,即。当您单击哪个插件是处理程序的文本框时,它会向您显示它的动态 html 创建(日历),您再次单击它的某个地方,那里也有一个事件处理程序,它将根据位置用一些适当的值填充文本框你的点击(日期)。所以在上面的代码中,它就像分配一个 change
事件处理程序并期望 $("#userInput").val("11");
调用处理程序;这不起作用警报永远不会弹出。
所以我能找到的唯一替代方法不被认为是一种好的做法,但在这里可以提供帮助的是,您可以在动态生成的元素上分配处理程序,这些元素用于呈现您的日历,在这种情况下,它们使用 <table>
所以你可以为 <td>
元素分配一个委托的 click
处理程序并在其中编写你的时间选择器代码。
我正在使用这个 datepicker and this timepicker。我想开发 JS 代码来确定用户是否在日期选择器上选择了当前日期,如果是这样,这将触发时间选择器的一个函数,该函数将禁用实际时间之前的所有时间。我是 JavaScript 的新手,所以我只了解了这么多。
HTML:
<input id="datemax" placeholder="Enter the date of incident" type="text"/>
<input id="timemax" placeholder="Enter the time of incident" type="text"/>
禁用当前时间之前的时间的功能,该功能有效但无论选择什么日期都将保持不变:
function getCurrentTime(date) {
var hours = date.getHours();
var minutes = date.getMinutes();
var ampm = hours >= 12 ? 'pm' : 'am';
hours = hours % 12;
hours = hours ? hours : 12;
minutes = minutes < 10 ? '0'+minutes : minutes;
return hours + ':' + minutes + ' ' + ampm;
}
var timesAvailable = {
'timeFormat': 'h:i A',
'disableTimeRanges': [[getCurrentTime(new Date()), '12am']]
};
$('#timemax').timepicker(timesAvailable);
我想知道将上述 JS 函数实现到我的表单中需要什么。我假设需要开发第二个函数,并且需要使用 var datemax = document.getElementById("datemax").value;从日期字段调用值。
我在这里开发了一些不完整的伪代码:
function datetimeSelect{
var currentDate = new Date();
var day = currentDate.getDate();
var month = currentDate.getMonth();
var year = currentDate.getFullYear();
var datemax = document.getElementById("datemax").value;
if (datemax === currentDate){
//activate
'disableTimeRanges': [[getCurrentTime(new Date()), '12am']] //Can't select any time before now, greyed out
return false;
}
else //datemax does not equal to currentDate
{
$('#timeMax').timepicker();//Standard Datepicker and any time can be selected
return true;
{
因此,例如,如果选择的日期不是今天,时间选择器将 return 使用其默认功能,不会显示任何灰色时间。
如果我没理解错的话,你只需要使用jquery change function。
$("elementId").change(function() {
if(selectedDate == currentDate){
//disable times previous to the actual time
}
else{
}
});
你对这个问题的专注是值得注意的,但在目前的情况下很难找到任何解决方案,我在解释后提出了一个,试试看是否适合你的需要。
如果您有一个回调日期选择器插件,该插件在用户 select 说一个日期之后被调用,例如
datepickr('#datemax',{onSelect:'someFn'});
然后
function someFn()
{
alert('somethings changed');
var timesAvailable = {
'timeFormat': 'h:i A',
'disableTimeRanges': [['12am', getCurrentTime(new Date())]]
};
$('#timemax').timepicker(timesAvailable);
}
这本来很容易,但由于情况并非如此,您可能需要寻找其他 alternatives.Note 如果您喜欢这个 select 某个日期
$("#userInput").change(function(){
//same above code
});
那是行不通的,因为当您通过代码更改值时,事件不会触发,这正是该插件的作用,即。当您单击哪个插件是处理程序的文本框时,它会向您显示它的动态 html 创建(日历),您再次单击它的某个地方,那里也有一个事件处理程序,它将根据位置用一些适当的值填充文本框你的点击(日期)。所以在上面的代码中,它就像分配一个 change
事件处理程序并期望 $("#userInput").val("11");
调用处理程序;这不起作用警报永远不会弹出。
所以我能找到的唯一替代方法不被认为是一种好的做法,但在这里可以提供帮助的是,您可以在动态生成的元素上分配处理程序,这些元素用于呈现您的日历,在这种情况下,它们使用 <table>
所以你可以为 <td>
元素分配一个委托的 click
处理程序并在其中编写你的时间选择器代码。