【问题标题】:javascript/jquery integer becomes objectjavascript/jquery 整数变成对象
【发布时间】:2010-01-08 21:21:55
【问题描述】:

我有一张充满事件的表,我正在尝试获取每小时发生的事件的数量。这样就很容易看到并发事件的数量。

为此,我在表格中运行以寻找事件 div(位于 td 内),然后获取开始和持续时间,并将其放入单独的 div 中,然后将它们加起来所以我'最终会是 '9:00, 5 events', 10:00, 3 events...

到目前为止,我认为代码看起来不错,但我遇到了一个奇怪的问题。我正在传递一个索引,所以我知道正在计算哪个单元格。 第一个警报返回索引号。但是,第二个警报返回 [object HTMLDivELEMENT],我不知道这是为什么。如果我可以在 .each 函数之后获得索引,我认为一切都会正常工作。

代码是这样的(为了便于理解,稍微简化了一点)

for(sched=1;sched<8;sched++){
alert(sched);
jQuery('div.event', 'table#events td:nth-child('+sched+')').each(function(sched){
    var start=jQuery(this).data('start');
    var duration=jQuery(this).data('dur');
    var eventId=jQuery(this).attr('id');
    alert(sched);
    for(t=0;t<=duration;t++){
    var thisHour=start+t;

    var numEvents=jQuery('li#hour'+thisHour, 'table#events td.dailyTotals:nth-child('+sched+')').data('count');
    if(numEvents==null){

    numEvents=0;
    }
    numEventsf++;
    jQuery('li#hour'+thisHour, 'table#events td.dailyTotals:nth-child('+sched+')').css('background-color','red');

    jQuery('li#hour'+thisHour,'table#events td.dailyTotals:nth-child('+sched+')').data('count', numEvents);
    jQuery('li#hour'+thisHour,'table#events td.dailyTotals:nth-child('+sched+')').text(numEvents);
    }
    });
}

【问题讨论】:

    标签: jquery string object


    【解决方案1】:

    当第二个 alert() 执行时,名称 'sched' 指向 $.each() 迭代中的当前元素,因为您的回调(发送到 $.each)声明了 sched 参数。

    ** 已编辑 **

    这个简化的例子符合我认为你正在寻找的...

    <html>
    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    </head>
    <body>
    
    <ul id="monkey">
      <li><span>xxx</span></li>
      <li><span>yyy</span></li>
      <li><span>zzz</span></li>
    </ul>
    
    <script type="text/javascript" charset="utf-8">
    
    for(thisIsANumber=1; thisIsANumber < 4; thisIsANumber++){
        alert(thisIsANumber);
        $("span", $("#monkey li:nth-child(" + thisIsANumber + ")")).each(function(thisIsAnHtmlElement) {
            alert(thisIsANumber);
        });
    }
    </script>
    </body>
    
    </html>
    

    我认为这里问题的症结在于:您不负责传递给回调函数的参数。你不能选择传递——这是由 jQuery 完成的,它传递了 $.each() 循环当前位置的 DOM 元素。

    但是,您可以引用在 $.each() 回调外部定义并由 for 循环管理的原始“sched”变量。

    【讨论】:

    • 谢谢draw,我还以为是这样的。但是你如何解决这个问题?我尝试添加一个 var sched2=sched,并将其传递给 .each(function(sched2),但这不起作用。
    • 在我看来,您根本不像在使用回调参数。换句话说,每次引用“sched”时,你只需要数字索引——这准确吗?如果是这样,只需更改为 .each(function(someNameYouDontUse) {...}),或者(可能有效)完全删除参数。
    • 我使用的是参数,它定义了哪一列被更新以及事件属于哪一列。我尝试使用不同的名称(这是我在 sched2 中提到的),但仍然返回一个对象。
    • 不知道为什么当我尝试添加另一个点时你失去了一个点。现在我明白了。我确实觉得很奇怪,我没有在函数中传递参数,但是 jQuery 无论如何都可以使用它。这就是我猜是什么让我绊倒了。
    【解决方案2】:

    我建议您查看 $.each 函数的 jquery 文档。 http://docs.jquery.com/Utilities/jQuery.each 。 $.each() 支持传入一个函数,其中一个参数仅用于一个值本身或两个参数,一个用于索引,一个用于值。请记住,传递给 $.each() 的函数中定义的所有参数仅由 jquery 使用,如果您想使用在传递给 $.each() 的函数范围之外定义的变量,那么您需要确保变量不会与传递给 $.each() 的函数中的任何命名参数或变量发生冲突。

    【讨论】:

    • 也许我理解不正确。我查看了文档,但没有看到与此类问题相关的任何内容。从我上面的代码中可以看出,我传递了一个 sched 参数。据我所知,它被传递到函数中,并且名称肯定不会与传递给每个函数的任何其他内容发生冲突。我也尝试将 sched 重命名为 sched2,并将 sched2 传递给每个,但我得到了相同的结果。
    • 不能传递参​​数,你只能接受jQuery愿意发送给你的参数。请参阅我编辑的答案。
    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2016-02-27
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    相关资源
    最近更新 更多