2013-02-07 47 views
0

我一直在玩這段代碼,一切似乎工作得很好。當我將其中一個黃色框拖到紅色容器上方時,變量price將與data-price值一起遞增,然後在黃色框離開紅色容器時將其減去。jQuery可拖動和droppable與數據()返回NaN

當我將它們拖回紅色容器一次並導致NaN時,問題就出現了。 $(".draggable[data-item='" + value + "']").data('price');似乎未定義。

任何幫助在正確的方向表示讚賞。

$(function() { 
    var price = 0, math = '', items = []; 
    function calcPrice(math) { 
     console.log(items); 
     $.each(items, function(key, value) { 
     if(math == 'add') 
      price += $(".draggable[data-item='" + value + "']").data('price'); 
     if(math == 'remove') 
      price -= $(".draggable[data-item='" + value + "']").data('price'); 
     }); 
    $("#droppable").text(price); 
    } 
    $(".draggable").draggable({ containment: "#container", scroll: false }); 
    $("#droppable").droppable({ 
    drop: function(e, u) { 
     items.push(u.draggable.data('item')); 
     calcPrice('add'); 
    }, 
    out: function(e, u) { 
     calcPrice('remove'); 
     items.splice($.inArray(u.draggable.data('item', items),1)); 
    } 
    }); 
}); 

 

<div id="container"> 
    <div id="droppable"></div> 
    <div class="draggable" data-item="1" data-price="541">541</div> 
    <div class="draggable" data-item="2" data-price="542">542</div> 
    </div> 

Jsbin:http://jsbin.com/exilos/1/edit

+1

@ estrar ..我認爲問題是循環引用..你是否檢查你的控制檯日誌? – Rinku

回答

2

在我們的代碼有問題的行是
items.splice($.inArray(u.draggable.data('item', items),1));
我已經改變了,要
items.splice($.inArray(u.draggable.data('item'), items));
NaN的問題是不存在了..u必須檢查價格的計算。
see this link

+0

upvote ???只是開玩笑:D..happy幫助.. – Rinku

+0

啊,太棒了。謝謝!是的,我看到計算問題,如果物品在紅色容器中反覆丟棄,則每次都會加起來。你現在也得到了你的讚賞;) – estrar

+0

:) ..嗯..你可以做的事情當你滴滴重新初始化價格... – Rinku