2009-12-21 2 views
0

У меня есть небольшая проблема.Значения jQuery от элементов выше

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

var time = $(ui.draggable).attr("time"); 

теперь мы получили 4 позиции со временем следующим образом:

  1. 432 сек
  2. 123 сек
  3. 5634 сек
  4. 654 сек

Теперь я хочу выразить это следующим образом:

1. 432 
2. 432+123 
3. 432+123+5634 
4. 432+123+5634+654 

Любые идеи, как я могу это сделать?

Это мой код:

$(document).ready(function(){ 

    $(".trash").sortable({ 
     tolerance: 'touch', 
     receive: function (event, ui) { 
     ui.item.remove(); 
      } 
    }); 
    $(".DragContainer_dest").sortable({helper:'clone', 
     opacity: 0.5, 
     connectWith: '.trash', 
     scroll: true, 
     update : function() { 
     var order = $('.DragContainer_dest').sortable('serialize',{key:'string'}); 
     $.post('includes/ajaxify.php',order+'&action=update');  
     var time = $(this).attr("time"); 
     }, 
     out : function() { 
      ui.item.remove(); 
     } 
    }); 

    $("div[class=DragContainer] .DragBox").draggable({helper:'clone'}); 

    $(".DragContainer_dest").droppable({ 
     accept: ".DragBox", 
     tolerance: "touch", 
     drop: function(ev, ui) { 
      $(this).append($(ui.draggable).clone().addClass("added")); 
     } 
    }); 
    }); 

Я хочу, чтобы каждый элемент уронили или сортируется в DragContainer_dest просуммировать значения из других элементов, расположенных над ним. Это можно сделать?

ответ

1

Как я могу понять, вам нужно собрать всех братьев и сестер узла, которые находятся перед рассматриваемым элементом, и собрать их атрибуты. Давайте попробуем это:

var nodeSiblings = $(this).parent().children(); 
// We need to find the index of our element in the array 
var stopIndex = nodeSiblings.index(this); 
var time = 0; 

nodeSiblings.each(function(index, element){ 
    if (index > stopIndex) return; 
    var attribute = parseInt($(element).attr("time"), 10); 
    if (!isNaN(attribute)) time += attribute; 
}); 

// Here you have the sum of all time attributes 
alert(time); 
+0

Я добавил ваш код функции капли, но, к сожалению, предупреждение возвращается «NaN». Что это значит? – PsychoX

+0

И stopIndex всегда «1» – PsychoX

+0

Насколько я вижу, вам нужно добавить этот код в функцию обновления. Этот фрагмент был написан с учетом того, что «это» является отброшенным элементом. Если он уведомляет NaN, это означает, что некоторые элементы не имеют атрибута «время», или он пуст. –

0

Может быть, добавить глобальную переменную, называемую timeSum, а затем увеличить ее для каждого элемента, сброшенного?

var timeSum = 0; 

$(".DragContainer_dest").droppable({ 
    drop: function(ev, ui) { 
     timeSum += parseInt($(ul.draggable).attr('time')); 
    } 
}); 
0

Если вы используете ParseInt, как указано в другом месте, не забудьте включить десятичную:

parseInt($(ul.draggable).attr('time'), 10); 

Если у вас есть ноль в начале он будет относиться к ней как восьмеричное, если не указано радиус.

+0

Это относится к комментарию. –