Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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 - Fatal编程技术网

Javascript 为什么这个变量没有定义?

Javascript 为什么这个变量没有定义?,javascript,Javascript,我试图在我维护的页面上扩展JavaScript,以便在加载页面的日历部分时应用一些格式。有一个预先存在的名为InitCalendar(month)的函数,它响应单击加载节 日历是以天数列表的形式编写的。我想根据每天的事件数更改包含事件的元素的高度。如果一天中有两个而不是一个活动,那么每个活动都需要缩小以适应,等等 因此,预期的算法是: 获取日历中日期的数组 对于每个,获取它包含的元素的数组 根据div数组的长度设置适当的高度 我的努力因以下错误而失败:“UncaughtTypeError:无

我试图在我维护的页面上扩展JavaScript,以便在加载页面的日历部分时应用一些格式。有一个预先存在的名为
InitCalendar(month)
的函数,它响应单击加载节

日历是以天数列表的形式编写的。我想根据每天的事件数更改包含事件的
元素的高度。如果一天中有两个而不是一个活动,那么每个活动都需要缩小以适应,等等

因此,预期的算法是:

  • 获取日历中日期的数组

  • 对于每个
  • ,获取它包含的
    元素的数组

  • 根据
    div
    数组的长度设置适当的高度

我的努力因以下错误而失败:“UncaughtTypeError:无法读取未定义的属性'style'”

这是我的密码:

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
的赋值和中的更改ode>我想你可能想要:

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;
   };
};