下拉触发更改功能以获取要在 datetimepicker 中禁用的日期
Dropdown trigger change function to fetch dates to disable in datetimepicker
我有一个员工姓名和 StaffId 的下拉列表。这连接到约会业务逻辑。我正在尝试触发 select 更改,以便设置存储在数据库中的日期在连接的 jquery 日期时间选择器中不可用。我已经组装了下面似乎不起作用的代码。谁能指出我正确的方向。谢谢
<script type="text/javascript">
$(document).ready(function () {
getdates();
});
var unavailableDates;
$(document).ready( function getdates() {
$("#StaffId").change(function (e) {
$this = $(e.target);
$.ajax({
type: "POST",
url: "/Appointment/GetOffdays",
data: { StaffId: $this.val() },
//contentType: "application/json"
success: function (data) {
debugger;
unavailableDates = data;
$(".jqueryui-marker-datepicker").datepicker({
dateFormat: "dd/M/yy",
changeMonth: true,
changeYear: false,
yearRange: "-1:+0",
//beforeShowDay: $.datepicker.noWeekends,
minDate: new Date(@(ViewBag.year+","+ViewBag.month+","+ViewBag.day)),
maxDate: new Date(@(ViewBag.eyear+","+ViewBag.emonth+","+ViewBag.eday)),
beforeShowDay: function (date) {
var dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
debugger;
if ($.inArray(dmy, unavailableDates) == -1) {
return [true, ""];
} else {
return [false, "myclass", "Unavailable"];
}
}
});
},
dataType: "json",
traditional: true,
})
}
)
$('#StaffId').trigger('change');
});
</script>
可能是因为您没有先为下拉列表定义值。试试这个:
$('#StaffId').val('12345');
$('#StaffId').trigger('change');
其他备注:为什么2个文件准备好了?
为了降低代码的复杂性,我删除了 getdates
的内容并用一个简单的 log() 替换它,我将在下面放置它。如果我按原样执行此页面,则首先调用发送到 $(document.ready()
的匿名函数,甚至在提到函数 getdates
之前,导致控制台抛出
jQuery.Deferred exception: getdates is not defined ReferenceError: getdates is not defined
根据这个问题
jQuery - multiple $(document).ready ...?
当多次连续调用 $(document).ready 时,在 DOM 准备就绪后,每个函数将按照它们设置的顺序被调用。即使您颠倒了对 ready
的调用顺序,因为命名函数 getDates
仅在函数调用期间命名,因此在其他任何地方都无法使用该名称调用。编辑:另请注意,如果排队等候 documentready 的第一个函数抛出异常,jquery 将 不会 调用下一个。所以如果匿名函数失败,命名函数将被完全跳过。
请多多包涵,因为我在这个网站上确实没有回答很多问题,而且我可能严重误解了您的代码。但我认为您要做的是定义一个函数 getDates
并在名为“#StaffId”的 HTML 元素的值发生更改时调用它。要实现这一点,您只需要调用一次 $(document).ready()
,它可以调用必须在其范围内定义的函数 getdates
,或者您可以完全摆脱 getdates
并调用它的内容是匿名的。
<script type="text/javascript">
$(document).ready(function () {
getdates();
});
var unavailableDates;
//this function might as well be anonymous since getdates is not available anywhere else by that name.
//The function it refers to is passed and executed on document ready, but the alias getdates goes away.
$(document).ready( function getdates() {
console.log("getting dates");
});
</script>
应该是
<script type="text/javascript">
//if unavailableDates is not used outside this function, it probably shouldn't be in the global scope.
var unavailableDates;
function getDates(){
//now getDates is available everywhere, by its name
console.log("getting dates");
};
//or $(document).ready(getDates);
$(getDates);
</script>
或者只是
<script type="text/javascript">
$(function (){
//no need for named getdates polluting global namespace if you only intend to call it once.
//do whatever you want here
});
</script>
我有一个员工姓名和 StaffId 的下拉列表。这连接到约会业务逻辑。我正在尝试触发 select 更改,以便设置存储在数据库中的日期在连接的 jquery 日期时间选择器中不可用。我已经组装了下面似乎不起作用的代码。谁能指出我正确的方向。谢谢
<script type="text/javascript">
$(document).ready(function () {
getdates();
});
var unavailableDates;
$(document).ready( function getdates() {
$("#StaffId").change(function (e) {
$this = $(e.target);
$.ajax({
type: "POST",
url: "/Appointment/GetOffdays",
data: { StaffId: $this.val() },
//contentType: "application/json"
success: function (data) {
debugger;
unavailableDates = data;
$(".jqueryui-marker-datepicker").datepicker({
dateFormat: "dd/M/yy",
changeMonth: true,
changeYear: false,
yearRange: "-1:+0",
//beforeShowDay: $.datepicker.noWeekends,
minDate: new Date(@(ViewBag.year+","+ViewBag.month+","+ViewBag.day)),
maxDate: new Date(@(ViewBag.eyear+","+ViewBag.emonth+","+ViewBag.eday)),
beforeShowDay: function (date) {
var dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
debugger;
if ($.inArray(dmy, unavailableDates) == -1) {
return [true, ""];
} else {
return [false, "myclass", "Unavailable"];
}
}
});
},
dataType: "json",
traditional: true,
})
}
)
$('#StaffId').trigger('change');
});
</script>
可能是因为您没有先为下拉列表定义值。试试这个:
$('#StaffId').val('12345');
$('#StaffId').trigger('change');
其他备注:为什么2个文件准备好了?
为了降低代码的复杂性,我删除了 getdates
的内容并用一个简单的 log() 替换它,我将在下面放置它。如果我按原样执行此页面,则首先调用发送到 $(document.ready()
的匿名函数,甚至在提到函数 getdates
之前,导致控制台抛出
jQuery.Deferred exception: getdates is not defined ReferenceError: getdates is not defined
根据这个问题
jQuery - multiple $(document).ready ...?
当多次连续调用 $(document).ready 时,在 DOM 准备就绪后,每个函数将按照它们设置的顺序被调用。即使您颠倒了对 ready
的调用顺序,因为命名函数 getDates
仅在函数调用期间命名,因此在其他任何地方都无法使用该名称调用。编辑:另请注意,如果排队等候 documentready 的第一个函数抛出异常,jquery 将 不会 调用下一个。所以如果匿名函数失败,命名函数将被完全跳过。
请多多包涵,因为我在这个网站上确实没有回答很多问题,而且我可能严重误解了您的代码。但我认为您要做的是定义一个函数 getDates
并在名为“#StaffId”的 HTML 元素的值发生更改时调用它。要实现这一点,您只需要调用一次 $(document).ready()
,它可以调用必须在其范围内定义的函数 getdates
,或者您可以完全摆脱 getdates
并调用它的内容是匿名的。
<script type="text/javascript">
$(document).ready(function () {
getdates();
});
var unavailableDates;
//this function might as well be anonymous since getdates is not available anywhere else by that name.
//The function it refers to is passed and executed on document ready, but the alias getdates goes away.
$(document).ready( function getdates() {
console.log("getting dates");
});
</script>
应该是
<script type="text/javascript">
//if unavailableDates is not used outside this function, it probably shouldn't be in the global scope.
var unavailableDates;
function getDates(){
//now getDates is available everywhere, by its name
console.log("getting dates");
};
//or $(document).ready(getDates);
$(getDates);
</script>
或者只是
<script type="text/javascript">
$(function (){
//no need for named getdates polluting global namespace if you only intend to call it once.
//do whatever you want here
});
</script>