如何在函数中合并函数
how to incorporate a function within a function
我用新日期创建的字符串日期更新了我的代码,并重新添加到 if 语句中。不过,这不会禁用字符串或范围。我也添加了日期选择器代码。
function unavailableDays(date) {
function createDateRange(first, last) {
var dates = [];
for(var j = first; j < last; j.setDate(j.getDate() + 7)) {
dates.push(new Date(j.getTime()));
}
var alwaysDisabled = [new Date("1963-3-10T00:00:00"), new Date("1963-3-17T00:00:00"), new Date("1963-3-24T00:00:00"), new Date("1963-3-31T00:00:00"), new Date("1965-9-18T00:00:00")];
return dates.concat(alwaysDisabled);
}
var disabledDays = createDateRange(new Date("1978-8-10T00:00:00"), new Date("1978-11-5T00:00:00"));
var yy = date.getFullYear(), mm = date.getMonth(), dd = date.getDate();
for (i = 0; i < disabledDays.length; i++) {
if($.inArray(yy + '-' + (mm+1) + '-' + dd,disabledDays) != -1 || new Date() < date) {
return [false];
}
}
return [true];
}
$(document).ready(function (){
$('.selector').datepicker({
inline: true,
dateFormat: 'yy-mm-dd',
constrainInput: true,
changeYear: true,
changeMonth: true,
minDate: new Date(1940, 1-1, 1),
maxDate: new Date(2011, 10-1, 24),
beforeShowDay: unavailableDays,
onSelect: function(dateText, inst) {
$("#img").attr("src", "http://www.example.com" + dateText + ".jpg");
var chosenDates = $.datepicker.parseDate('yy-mm-dd', dateText);
var backToString = $.datepicker.formatDate('MM dd' + ',' + ' yy', chosenDates);
$('.info').html('You are viewing:' + '<br />' +
backToString).addClass('background');
}
});
});
在你的函数中,dates.push
需要date.push
。
所以看起来你只是想分离出函数:
function createDateRange(first, last) {
var date = [];
for(var j = first; j < last; j.setDate(j.getDate() + 7))
dates.push(new Date(j.getTime()));
return date;
}
function unavailableDays(date) {
var disabledDays = createDateRange(new Date("1978-08-10"), new Date("1978-11-05"));
//date array to be disabled
var disabledDays = ["1963-3-10", "1963-3-17", "1963-3-24", "1963-3-31", "1965-9-18"];
var yy = date.getFullYear(), mm = date.getMonth(), dd = date.getDate();
for (i = 0; i < disabledDays.length; i++) {
if($.inArray(yy + '-' + (mm+1) + '-' + dd,disabledDays) != -1 || new Date() < date) {
return [false];
}
}
return [true];
}
这将允许您在另一个函数中使用createDateRange
和unavailableDays
:
function someOtherFunction() {
var someDateRange = createDateRange(new Date('1979-10-10'), new Date('1980-01-01'));
… // stuff
}
在
另一个函数中有一个函数没有问题,JavaScript 几乎是基于这个的。你也可以有单独的功能,它也可以工作。
更新
(考虑到date
与dates
问题已修复)
所在(这似乎是你的问题的真正内容,而不是函数内部的函数!):createDateRange
返回一个Date
对象的数组,但你的另一个版本(var disabledDays = ["1963-3-10", ...
)是一个字符串数组(并且格式不能被new Date(str)
解析)。
您当前的循环似乎正在尝试处理此字符串版本,并且它有效,但您希望createDateRange
始终忽略某些日期(据我所知您在说什么)。所以,试试这个:
function unavailableDays(date) {
function createDateRange(first, last) {
var dates = [];
for(var j = first; j < last; j.setDate(j.getDate() + 7)) {
dates.push(new Date(j.getTime()));
}
var alwaysDisabled = [new Date("1963-03-10T00:00:00"), new Date("1963-03-17T00:00:00"), new Date("1963-03-24T00:00:00"), new Date("1963-03-31T00:00:00"), new Date("1965-09-18T00:00:00")];
return dates.concat(alwaysDisabled);
}
var disabledDays = createDateRange(new Date("1978-08-10T00:00:00"), new Date("1978-11-05T00:00:00"));
for (i = 0; i < disabledDays.length; i++) {
if(disabledDays[i].getTime() == date.getTime()) {
return false;
}
}
return true;
}
// Use `T00:00:00` after the date to set it as GMT, or
// dates can be interpreted as the previous day on some timezones.
var testDate1 = new Date('1978-08-10T00:00:00')
console.log("-- " + unavailableDays(testDate1)); // false
var testDate2 = new Date('1978-08-11T00:00:00')
console.log("-- " + unavailableDays(testDate2)); // true
var testDate3 = new Date('1978-08-17T00:00:00')
console.log("-- " + unavailableDays(testDate3)); // false
var testDate4 = new Date('1963-03-10T00:00:00')
console.log("-- " + unavailableDays(testDate4)); // false
http://jsfiddle.net/t4ahF/4/
相关文章:
- JQuery合并了keyup和focusout两个函数
- DataTables合并了两个独立表中的jQuery/Javascript函数
- jQuery将代码合并为一个函数
- 将3个函数合并在一起
- 将多个jquery函数合并为一个
- 如何使用ES6将两个具有函数的对象合并为一个新对象
- 将两个云代码函数合并为一个函数
- 有没有一个lodash函数可以合并两个对象并删除其中一个对象的属性(如果它们没有)'不存在于另一个中
- 是否可以通过添加新参数而不使用 eval 将所有这三个函数合并为一个函数
- 如何将这些函数合并为具有属性的单个函数
- 在 jQuery 中将 2 个函数合并为一个
- 对象和数组通过映射函数合并
- 将2个javascript函数合并为1个
- 我可以使用Javascript将两个函数合并为一个吗?
- 将两个特定的javascript函数合并为一个函数以获得所需的效果
- 扩展一个函数——合并两个函数
- JavaScript:如何将两个函数合并为一个新函数
- 将多个jquery -click-函数合并为一个
- 在javascript中将3个函数合并为一个函数
- 将两个简单的javascript函数合并为一个