целое число javascript / jquery становится объектом - PullRequest
0 голосов
/ 09 января 2010

У меня есть таблица, полная событий, и я пытаюсь узнать количество событий, которые происходят каждый час. Так что легко увидеть количество одновременных событий.

Чтобы сделать это, я бегу по таблице в поисках div-событий (которые находятся внутри td), а затем получаю начало и продолжительность, и помещаю это в отдельный div, складывая их, пока я иду Вы получите «9:00, 5 событий», 10:00, 3 события ...

Пока что я думаю, что код выглядит довольно хорошо, но у меня есть странная проблема. Я передаю индекс, чтобы знать, какая ячейка подсчитывается. Первое предупреждение возвращает номер индекса. Тем не менее, второе предупреждение возвращает [объект 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);
    }
    });
}

Ответы [ 2 ]

0 голосов
/ 09 января 2010

Я предлагаю вам взглянуть на документацию jquery для функции $ .each. http://docs.jquery.com/Utilities/jQuery.each. $ .each () поддерживает возможность передачи функции с одним параметром только для самого значения или двух параметров, одного для индекса и одного для значения. Помните, что все параметры, определенные в функции, переданной в $ .each (), используются jquery исключительно, если вы хотите использовать переменную, определенную вне области действия функции, переданной в $ .each (), тогда вам необходимо убедиться, что имя переменная не конфликтует ни с одним именованным параметром или переменной внутри функции, переданной в $ .each ().

0 голосов
/ 09 января 2010

Когда исполняется 2-й 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, и он передал элемент DOM в текущей позиции цикла $ .each ().

Однако вы можете ссылаться на исходную переменную 'sched', которая определена вне вашего обратного вызова $ .each () и управляется циклом for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...