为什么jQuery不接受数组中的#ID?

时间:2014-06-18 14:06:34

标签: javascript jquery arrays for-loop datepicker

我试图在3个输入字段中添加3个日期选择器,所以我回复了以下代码:

这个有效:

jQuery(function(){
    jQuery("#newnessdate").datepicker({
        dateFormat: \'yy-mm-dd\',
        monthNames: [\'Januar\',\'Februar\',\'März\',\'April\',\'Mai\',\'Juni\',\'Juli\',\'August\',\'September\',\'Oktober\',\'November\',\'Dezember\'],
        dayNames: [\'Sonntag\', \'Montag\', \'Dienstag\', \'Mittwoch\', \'Donnerstag\', \'Freitag\',\'Samstag\'],
        dayNamesMin: [\'So\', \'Mo\', \'Di\', \'Mi\', \'Do\', \'Fr\', \'Sa\']
    });
});

jQuery(function(){
    jQuery("#availabilitydate").datepicker({
        dateFormat: \'yy-mm-dd\',
        monthNames: [\'Januar\',\'Februar\',\'März\',\'April\',\'Mai\',\'Juni\',\'Juli\',\'August\',\'September\',\'Oktober\',\'November\',\'Dezember\'],
        dayNames: [\'Sonntag\', \'Montag\', \'Dienstag\', \'Mittwoch\', \'Donnerstag\', \'Freitag\',\'Samstag\'],
        dayNamesMin: [\'So\', \'Mo\', \'Di\', \'Mi\', \'Do\', \'Fr\', \'Sa\']
    });
});

jQuery(function(){
    jQuery("#expirydate").datepicker({
        dateFormat: \'yy-mm-dd\',
        monthNames: [\'Januar\',\'Februar\',\'März\',\'April\',\'Mai\',\'Juni\',\'Juli\',\'August\',\'September\',\'Oktober\',\'November\',\'Dezember\'],
        dayNames: [\'Sonntag\', \'Montag\', \'Dienstag\', \'Mittwoch\', \'Donnerstag\', \'Freitag\',\'Samstag\'],
        dayNamesMin: [\'So\', \'Mo\', \'Di\', \'Mi\', \'Do\', \'Fr\', \'Sa\']
    });
});

这不是:

var dateIds = [
    "#newnessdate", 
    "#availabilitydate",
    "#expirydate"
];

for (var i = 0; i < dateIds.length; i++)
{
    jQuery(function(){
        jQuery(dateIds[i]).datepicker({
            dateFormat: \'yy-mm-dd\',
            monthNames: [\'Januar\',\'Februar\',\'März\',\'April\',\'Mai\',\'Juni\',\'Juli\',\'August\',\'September\',\'Oktober\',\'November\',\'Dezember\'],
            dayNames: [\'Sonntag\', \'Montag\', \'Dienstag\', \'Mittwoch\', \'Donnerstag\', \'Freitag\',\'Samstag\'],
            dayNamesMin: [\'So\', \'Mo\', \'Di\', \'Mi\', \'Do\', \'Fr\', \'Sa\']
        });
    });
}

我已经对它进行了很多测试,并且不知道为什么它不起作用但是在行中

jQuery(dateIds[i]).datepicker({
看来,jQuery函数不接受数组中的字符串作为字符串。你能救我吗?

4 个答案:

答案 0 :(得分:3)

$("#newnessdate, #availabilitydate, #expirydate").datepicker({
            dateFormat: \'yy-mm-dd\',
            monthNames: [\'Januar\',\'Februar\',\'März\',\'April\',\'Mai\',\'Juni\',\'Juli\',\'August\',\'September\',\'Oktober\',\'November\',\'Dezember\'],
            dayNames: [\'Sonntag\', \'Montag\', \'Dienstag\', \'Mittwoch\', \'Donnerstag\', \'Freitag\',\'Samstag\'],
            dayNamesMin: [\'So\', \'Mo\', \'Di\', \'Mi\', \'Do\', \'Fr\', \'Sa\']
        });
    });
}

答案 1 :(得分:2)

你遇到的问题是,在调用回调时循环结束,i的值是循环结束的值。

简单修复(附加的好处是不会将调用乘以$.ready):

jQuery(function(){
    for (var i = 0; i < dateIds.length; i++)
    {
            jQuery(dateIds[i]).datepicker({
                dateFormat: \'yy-mm-dd\',
                monthNames: [\'Januar\',\'Februar\',\'März\',\'April\',\'Mai\',\'Juni\',\'Juli\',\'August\',\'September\',\'Oktober\',\'November\',\'Dezember\'],
                dayNames: [\'Sonntag\', \'Montag\', \'Dienstag\', \'Mittwoch\', \'Donnerstag\', \'Freitag\',\'Samstag\'],
                dayNamesMin: [\'So\', \'Mo\', \'Di\', \'Mi\', \'Do\', \'Fr\', \'Sa\']
            });
        }
    }
);

答案 2 :(得分:1)

DEMO

var dateIds = [
    "#newnessdate", 
    "#availabilitydate",
    "#expirydate"
];

var options = {
    dateFormat: 'yy-mm-dd',
    monthNames: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
    dayNames: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag','Samstag'],
    dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa']
};

$.each(dateIds, function(k, v) {
    $(v).datepicker(options); 
});

答案 3 :(得分:1)

根据文档“jQuery(callback)”类似于“jQuery(document).ready(callback)”。你失去了上下文(循环迭代器“我”),所以最好这样做:

jQuery(function(){
    var dateIds = [
        "#newnessdate", 
        "#availabilitydate",
        "#expirydate"
    ];

    for (var i = 0; i < dateIds.length; i++)
    {
        jQuery(dateIds[i]).datepicker({
            .......
        });
    }
});

它保存循环上下文并阻止创建多个事件(文档就绪)侦听器。如果您需要从全局上下文访问数组数据,只需将其放在回调函数之外,但使用全局上下文存储数据是不好的做法。