Javascript 为什么这个变量没有定义?
我试图在我维护的页面上扩展JavaScript,以便在加载页面的日历部分时应用一些格式。有一个预先存在的名为Javascript 为什么这个变量没有定义?,javascript,Javascript,我试图在我维护的页面上扩展JavaScript,以便在加载页面的日历部分时应用一些格式。有一个预先存在的名为InitCalendar(month)的函数,它响应单击加载节 日历是以天数列表的形式编写的。我想根据每天的事件数更改包含事件的元素的高度。如果一天中有两个而不是一个活动,那么每个活动都需要缩小以适应,等等 因此,预期的算法是: 获取日历中日期的数组 对于每个,获取它包含的元素的数组 根据div数组的长度设置适当的高度 我的努力因以下错误而失败:“UncaughtTypeError:无
InitCalendar(month)
的函数,它响应单击加载节
日历是以天数列表的形式编写的。我想根据每天的事件数更改包含事件的
元素的高度。如果一天中有两个而不是一个活动,那么每个活动都需要缩小以适应,等等
因此,预期的算法是:
- 获取日历中日期的数组
- 对于每个
,获取它包含的
元素的数组 - 根据
数组的长度设置适当的高度div
function setHeights(n, string, elems) {
// start at 1 to avoid the first element in the array.
for (var i = 1; i <= n; i++) {
var x = elems[i];
x.style.height = string;
};
};
function eventHeights() {
var ls = $(".calendar").children().children();
var n = ls.length;
for (var i = 0; i < n; i++) {
var divs = ls[i].children;
switch (divs.length) {
case 4:
setHeights(4, "27px", divs);
case 3:
setHeights(3, "52px", divs);
};
};
};
function InitCalendar(month)
{
// ... Some preexisting code to load the calendar section ...
eventHeights();
}
函数设置高度(n,字符串,元素){
//从1开始,以避免数组中的第一个元素。
对于(var i=1;i数组的索引是从0到length-1,而不是从1到length。在eventHeights
中,您做得对,但在setHeights
中,索引是错误的。setHeights
中的for循环是错误的。请注意i
的赋值和for (var i = 0; i < n; i++) {
(变量i=0;i{
它在一个数组中循环,数组从零开始。我认为您的:
function setHeights(n, string, elems) {
for (var i = 1; i <= n; i++) {
var x = elems[i];
x.style.height = string;
};
};
函数设置高度(n,字符串,元素){
对于(var i=1;i此代码存在另一个问题,虽然这不是错误消息的原因,但它使调试变得残酷。我的switch
语句在其case
条目中缺少break
语句。因此,即使有iFew注释:为什么循环从1开始?应该从0开始。它是从0开始的确定您没有将数组传递到setHeights中。ls.children
不是数组它从1开始,因为每个列表中的第一个
应该被跳过(它包含天数,而不是事件)。您能澄清第二点吗?ls.children()
似乎给了我一个不同的错误…如果你的循环不是从0开始的,应该会有一些关于它的注释,不要把它弄糊涂。ls.children
返回未定义的,因此你不能调用ls.children()
你可能想使用$(ls[i].children())
,或者ls[i].childNodes
但其中可能包含您不打算从1开始的文本节点,实际上是有意的--我需要跳过数组中的第一个元素。我将取消Ok。在这种情况下,1是Ok的,但是
for (var i = 0; i < n; i++) {
function setHeights(n, string, elems) {
for (var i = 1; i <= n; i++) {
var x = elems[i];
x.style.height = string;
};
};
function setHeights(n, string, elems) {
for (var i = 0; i < n; i++) {
var x = elems[i];
x.style.height = string;
};
};