jQuery - recalculateTotal - 添加和减去点击事件的价格

时间:2017-03-14 12:14:32

标签: javascript jquery

我是jQuery的新手,所以我通过试用去询问更有经验的帮助。

这是代码的一部分

 click: function () { //Click event
  if (this.status() == 'available') { //optional seat
   var maxSeats = 3;
   var ms = sc.find('selected').length;
   //alert(ms);
   if (ms < maxSeats) {

                price = this.settings.data.price;

                /*
                    $('<option selected>R'+(this.settings.row+1)+' S'+this.settings.label+'</option>')
                    .attr('id', 'cart-item-'+this.settings.id)
                    .attr('value', (this.settings.row+1)+'_'+this.settings.label)
                    .data('seatId', this.settings.id)
                    .appendTo($cart);
                */

                    $('<option selected>R'+(this.settings.row+1)+' S'+this.settings.label+'</option>')
                    .attr('id', 'cart-item-'+this.settings.id)
                    .attr('value', this.settings.id)
                    .attr('alt', price)
                    .data('seatId', this.settings.id)
                    .appendTo($cart);

                $counter.text(sc.find('selected').length+1);
                $counter.attr('value', sc.find('selected').length+1);

                $total.text(recalculateTotal(sc));
                $total.attr('value', recalculateTotal(sc));

                return 'selected';
            }
                alert('You can only choose '+ maxSeats + ' seats.');
                return 'available';

        } else if (this.status() == 'selected') { //Checked

                //Update Number
                $counter.text(sc.find('selected').length-1);
                $counter.attr('value', sc.find('selected').length-1);
                //update totalnum
                $total.text(recalculateTotal(sc));
                $total.attr('value', recalculateTotal(sc));

                //Delete reservation
                $('#cart-item-'+this.settings.id).remove();
                //optional
                return 'available';

        } else if (this.status() == 'unavailable') { //sold
            return 'unavailable';

        } else {
            return this.style();
        }
    }
});

问题尤其与重新计算总数

有关
        $total.text(recalculateTotal(sc));
        $total.attr('value', recalculateTotal(sc));

实际上,此功能计算地图上每次点击的总价格,并在再次点击项目(取消选择)时重新计算。 当我单击选择一个项目时,该函数会正确计算总数,当我再次单击一个项目取消选择它时,在第一次取消选择(或单击)时,不会减去该数量。

更具体地举个例子: 如果我选择三个项目,每个价格为10欧元,每次点击总数都会正确更新(10 + 10 + 10 = 30); 当我取消选择这三个元素时,当我执行第一次单击时,总数未更新,而在下面的单击(取消选择)中,总数已更新,因此它不会返回= 0但是10。

所以,我发现没有选择任何元素,但总数需要10个!

我试图包含此更改,但计算完全错误

...........
...........
                $total.text(recalculateTotal(sc)+this.settings.data.price);
                $total.attr('value', recalculateTotal(sc)+this.settings.data.price);
                return 'selected';

            }

                alert('You can only choose '+ maxSeats + ' seats.');
                return 'available';

        } else if (this.status() == 'selected') { //Checked
......
......
                //update totalnum
                $total.text(recalculateTotal(sc)-this.settings.data.price);
                $total.attr('value', recalculateTotal(sc)-this.settings.data.price);

任何建议将不胜感激

1 个答案:

答案 0 :(得分:0)

这是解决方案

向上移动

            //Delete reservation
            $('#cart-item-'+this.settings.id).remove();

            //update totalnum
            $total.text(recalculateTotal(sc));
            $total.attr('value', recalculateTotal(sc));

这是完整正确的代码

    click: function () { //Click event
  if (this.status() == 'available') { //optional seat
   var maxSeats = 3;
   var ms = sc.find('selected').length;
   //alert(ms);
   if (ms < maxSeats) {

                price = this.settings.data.price;

                /*
                    $('<option selected>R'+(this.settings.row+1)+' S'+this.settings.label+'</option>')
                    .attr('id', 'cart-item-'+this.settings.id)
                    .attr('value', (this.settings.row+1)+'_'+this.settings.label)
                    .data('seatId', this.settings.id)
                    .appendTo($cart);
                */

                    $('<option selected>R'+(this.settings.row+1)+' S'+this.settings.label+'</option>')
                    .attr('id', 'cart-item-'+this.settings.id)
                    .attr('value', this.settings.id)
                    .attr('alt', price)
                    .data('seatId', this.settings.id)
                    .appendTo($cart);

                $counter.text(sc.find('selected').length+1);
                $counter.attr('value', sc.find('selected').length+1);

                $total.text(recalculateTotal(sc));
                $total.attr('value', recalculateTotal(sc));

                return 'selected';
            }
                alert('You can only choose '+ maxSeats + ' seats.');
                return 'available';

        } else if (this.status() == 'selected') { //Checked

                //Update Number
                $counter.text(sc.find('selected').length-1);
                $counter.attr('value', sc.find('selected').length-1);

                //Delete reservation
                $('#cart-item-'+this.settings.id).remove();

                //update totalnum
                $total.text(recalculateTotal(sc));
                $total.attr('value', recalculateTotal(sc));


                //optional
                return 'available';

        } else if (this.status() == 'unavailable') { //sold
            return 'unavailable';

        } else {
            return this.style();
        }
    }
});