2012-12-19 36 views
27

Tôi đang cố gắng để thêm tất cả các nội dung calo trong javascript của tôi như thế này:Làm thế nào để buộc bổ sung thay vì nối trong javascript

$(function() { 
    var data = []; 

    $("#draggable1").draggable(); 
    $("#draggable2").draggable(); 
    $("#draggable3").draggable(); 

    $("#droppable_box").droppable({ 
     drop: function(event, ui) { 
      var currentId = $(ui.draggable).attr('id'); 
      var total = 0; 
      data.push($(ui.draggable).attr('id')); 

      if(currentId == "draggable1"){ 
      var myInt1 = parseFloat($('#MealplanCalsPerServing1').val()); 
      } 
      if(currentId == "draggable2"){ 
      var myInt2 = parseFloat($('#MealplanCalsPerServing2').val()); 
      } 
      if(currentId == "draggable3"){ 
      var myInt3 = parseFloat($('#MealplanCalsPerServing3').val()); 
      } 
     if (typeof myInt1 === 'undefined' || !myInt1) { 
     myInt1 = parseInt(0); 
     } 
     if (typeof myInt2 === 'undefined' || !myInt2){ 
     myInt2 = parseInt(0); 
     } 
     if (typeof myInt3 === 'undefined' || !myInt3){ 
     myInt3 = parseInt(0); 
     } 
     total = parseFloat(myInt1 + myInt2 + myInt3); 
     $('#response').append(total); 
     } 
    }); 
    $('#myId').click(function(event) { 
     $.post("process.php", ({ id: data }), function(return_data, status) { 
      alert(data); 
      //alert(total); 
     }); 
    }); 
}); 

Thay vì thêm các biến họ nhận được nối vào nhau. Tôi đã thử bằng cách sử dụng parseInt, parseFloat, và Number nhưng tôi vẫn chỉ nhận được nối và không bổ sung. Hãy nhìn vào nguồn xem tại http://maureenmoore.com/momp_112412/121912_800.html

Trả lời

48

Mã của bạn concatenates ba chuỗi, sau đó chuyển đổi các kết quả thành một số.

Bạn cần chuyển đổi mỗi biến thành một số bằng cách gọi parseFloat() xung quanh mỗi biến.

total = parseFloat(myInt1) + parseFloat(myInt2) + parseFloat(myInt3); 
+0

Có bất kỳ lợi ích nào cho 'parseFloat' so với cộng đồng cũ tốt cộng với? –

+3

@JanDvorak: Nó làm cho ý định rõ ràng hơn. – SLaks

+0

Cảm ơn tôi đã thêm mã của bạn vào http://maureenmoore.com/momp_112412/121912_800.html nhưng nó không cải thiện tình hình. –

1

Các tuyên bố sau gắn thêm giá trị cho các phần tử với id của response

$('#response').append(total); 

Điều này làm cho nó trông giống như bạn đang concatenating các dây, nhưng bạn không, bạn đang thực sự phụ họ phần tử

sự thay đổi đó để

$('#response').text(total); 

Bạn cần thay đổi sự kiện thả để nó thay thế các giá trị của phần tử với tổng số, bạn cũng cần phải theo dõi những gì tổng số là, tôi đề nghị một cái gì đó như sau

$(function() { 
    var data = []; 
    var total = 0; 

    $("#draggable1").draggable(); 
    $("#draggable2").draggable(); 
    $("#draggable3").draggable(); 

    $("#droppable_box").droppable({ 
     drop: function(event, ui) { 
     var currentId = $(ui.draggable).attr('id'); 
     data.push($(ui.draggable).attr('id')); 

     if(currentId == "draggable1"){ 
      var myInt1 = parseFloat($('#MealplanCalsPerServing1').val()); 
     } 
     if(currentId == "draggable2"){ 
      var myInt2 = parseFloat($('#MealplanCalsPerServing2').val()); 
     } 
     if(currentId == "draggable3"){ 
      var myInt3 = parseFloat($('#MealplanCalsPerServing3').val()); 
     } 
     if (typeof myInt1 === 'undefined' || !myInt1) { 
      myInt1 = parseInt(0); 
     } 
     if (typeof myInt2 === 'undefined' || !myInt2){ 
      myInt2 = parseInt(0); 
     } 
     if (typeof myInt3 === 'undefined' || !myInt3){ 
     myInt3 = parseInt(0); 
     } 
     total += parseFloat(myInt1 + myInt2 + myInt3); 
     $('#response').text(total); 
     } 
    }); 

    $('#myId').click(function(event) { 
     $.post("process.php", ({ id: data }), function(return_data, status) { 
      alert(data); 
      //alert(total); 
     }); 
    }); 
}); 

Tôi di chuyển các var total = 0; tuyên bố ra khỏi sự kiện thả và thay đổi Statment phân từ này

total = parseFloat(myInt1 + myInt2 + myInt3); 

này

total += parseFloat(myInt1 + myInt2 + myInt3); 

đây là một exa làm việc mple http://jsfiddle.net/axrwkr/RCzGn/

3

cũng nên có khả năng để làm điều này:

total += eval(myInt1) + eval(myInt2) + eval(myInt3); 

này đã giúp tôi trong một khác nhau, nhưng tương tự, tình huống.

+2

Tại sao -1? Đã làm cho tôi. – vapcguy

+1

Hoàn hảo. Cảm ơn rất nhiều. đã làm việc cho tôi, đã bỏ phiếu cho số –

+1

Cảm ơn, rất vui khi được nghe! Không có ý tưởng tại sao điều này có một -1, trước đây, và ở lại đó quá lâu. – vapcguy