Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数名中的数组_Javascript_Jquery_Timepicker - Fatal编程技术网

Javascript 函数名中的数组

Javascript 函数名中的数组,javascript,jquery,timepicker,Javascript,Jquery,Timepicker,我正在尝试用JS编写一个小的“开放时间”脚本。我使用timepicker来完成这个任务,所有的工作都很好,我希望每天都有一个函数,我不想复制粘贴它七次 这是我代码的一部分: 呼叫部分: jQuery(document).ready(function() { var week = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']; for (var i = 0; i <

我正在尝试用JS编写一个小的“开放时间”脚本。我使用timepicker来完成这个任务,所有的工作都很好,我希望每天都有一个函数,我不想复制粘贴它七次

这是我代码的一部分: 呼叫部分:

jQuery(document).ready(function() {
    var week = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
    for (var i = 0; i < week.length; i++) {
        day = week[i];

        jQuery('#' + day + '_start1').timepicker({
            showLeadingZero: false,
            onHourShow: MondayHourFuncStart,
            //I want to add the day name instead of Monday
            onMinuteShow: MondayMinFuncStart //I want to add the day name instead of Monday
        });
    }
jQuery(文档).ready(函数(){
var week=[‘星期一’、‘星期二’、‘星期三’、‘星期四’、‘星期五’、‘星期六’、‘星期日’];
对于(变量i=0;i
功能部分:

week = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
for (var i = 0; i < week.length; i++) {

    function MondayHourFuncStart(hour) //I want to add the day name instead of Monday {
    var day = week[i];
    var tpEndHour = jQuery('#' + day + '_end1').timepicker('getHour');
    // all valid if no end time selected
    if (jQuery('#monday_end1').val() == '') {
        return true;
    }
    // Check if proposed hour is prior or equal to selected end time hour
    if (hour <= tpEndHour) {
        return true;
    }
    // if hour did not match, it can not be selected
    return false;
}
week=[“周一”、“周二”、“周三”、“周四”、“周五”、“周六”、“周日”];
对于(变量i=0;i
//object containing all the week's functions
var funcs = {},
    days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];

//build the functions for each day
for(var i = 0; i < days.length; i++) {
    funcs[days[i]] = function() {
        //stuffs
    }

    //or for multiple events/functions, something like
    funcs[days[i]] = {
        onHourShow: function() {},
        onMinuteShow: function() {}
    };
}

jQuery(document).ready(function() {
    var week = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
    for (var i = 0; i < week.length; i++) {
        day = week[i];

        jQuery('#' + day + '_start1').timepicker({
            showLeadingZero: false,
            onHourShow: funcs[day], //or funcs[day].onHourShow, depending on which you do above
            onMinuteShow: funcs[day]
        });
    }
}
//包含本周所有函数的对象
var funcs={},
天数=[‘星期一’、‘星期二’、‘星期三’、‘星期四’、‘星期五’、‘星期六’、‘星期日’];
//为每天构建函数
对于(变量i=0;i
像这样使用函数怎么样:

jQuery('#' + day + '_start1').timepicker({
    showLeadingZero: false,
    onHourShow: FuncStart(day),
    onMinuteShow: FuncStart(day)
});
然后重新定义FuncStart以返回相应的函数。例如:

function FuncStart(dayarg){

    //define functions
    function dynamicfunction(hour){
        var day = dayarg;
        var tpEndHour = jQuery('#' + dayarg + '_end1').timepicker('getHour');
        // all valid if no end time selected
        if (jQuery('#' + dayarg + '_end1').val() == '') {
            return true;
        }
        // Check if proposed hour is prior or equal to selected end time hour
        if (hour <= tpEndHour) {
            return true;
        }
        // if hour did not match, it can not be selected
        return false;
    }
    return dynamicfunction;
}
函数FuncStart(dayarg){
//定义函数
功能动态功能(小时){
var day=dayarg;
var tpEndHour=jQuery('#'+dayarg+'_end1')。时间选择器('getHour');
//如果未选择结束时间,则全部有效
if(jQuery('#'+dayarg+'_end1').val()=''){
返回true;
}
//检查建议的小时数是否早于或等于所选的结束时间小时

如果(hour将它们放入对象中是最好的方法,但请注意在循环外创建函数或将所需索引存储在闭包中。否则,在运行函数时,“i”的值将达到最大值。
在循环中,
var day=week[i];
将返回未定义,因为
i
将达到week.length

var fns = {},
    week = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];

function makeDayFn(i){
    return function(){
        console.log(week[i]);
    }
}

for(var i=0,len=week.length;i<len;i++){
    fns[week[i] + "HourFuncStart"] = makeDayFn(i);
}

fns.mondayHourFuncStart();
fns.tuesdayHourFuncStart();
fns.wednesdayHourFuncStart();
var fns={},
周=[‘星期一’、‘星期二’、‘星期三’、‘星期四’、‘星期五’、‘星期六’、‘星期日’];
函数makeDayFn(i){
返回函数(){
console.log(周[i]);
}
}

对于(var i=0,len=week.length;i,采用括号表示法来回答

您可以从当前对象获取它:

onHourShow: this[day + "HourFuncStart"],
根据方法所在的范围,您可能需要传递方法所在的
this
,或者专门指向它们。但一般来说,括号表示法可以从字符串中提取函数,因为方法只是对象的属性


尽管我必须说,Chad的答案将整个问题转化为使用泛化,这可能是一个更好的解决方案。

你能提到你想在哪里使用数组索引而不是字符串吗?你在一个块中有一个函数声明。这从一开始是无效的。但是,即使它是有效的,也没有意义。你只是过度使用了在循环中编写相同的函数。@user1689607他希望在每次迭代中创建不同的函数,例如,MondayHourFunc、TuesdayHourFunc等。最好用包含函数的属性填充对象。重构代码,使函数以日期名称作为参数,您不需要不同的乐趣正如我在下面所说的:我每天有4个函数(func hour start、func hour end、func minutes start和func minutes ends)。我不想在我的文档中有28个函数。这里有一个限制,在
func[days[I]]
函数中,分配
var day=week[I]
不起作用。@robC是的,OPs代码需要相应地调整。我刚才演示的是使用对象来实现函数,而不是构建全局命名函数。您的实现可能会有所不同。谢谢您的想法,我稍后会对其进行测试。Asad的解决方案现在对我有效,并且具有相同的概念。这是一个好主意,bu我仍然需要定义每个函数7次。我每天有4个函数(func hour start、func hour end、func minutes start和func minutes ends)。我不想在我的文档中有28个函数。@Kaherdin您不需要重新定义该函数7次。根据日期,您可以对实际函数进行更改。因此,只需定义一个函数,该函数的某些细节取决于
day
的值,并返回它。Thx!!我认为它有效,我将进行一些测试并完善它。然后我将发布结果:)