Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery,分离两个相互干扰的函数并相互传递变量的最佳方法是什么?_Javascript_Jquery_Ajax_Simplecart - Fatal编程技术网

Javascript Jquery,分离两个相互干扰的函数并相互传递变量的最佳方法是什么?

Javascript Jquery,分离两个相互干扰的函数并相互传递变量的最佳方法是什么?,javascript,jquery,ajax,simplecart,Javascript,Jquery,Ajax,Simplecart,我意识到这可能已经以某种方式得到了回答,同时我将继续努力寻找解决方案。我只是希望得到一些关于处理这个问题的最佳方法的想法 我有一辆购物车。 我的网站将许多商店链接在一起。 我的网站是基于重量而不是数量。 我的手推车最大容量为28克 如果用户在购物车中有一个物品,并且他们决定增加重量。旧项目将替换为新项目 在此过程中,旧项目重量被添加到新项目重量中,然后添加到推车当前重量中。我需要在此过程中排除旧项目的重量,仅比较新项目和购物车中的其他项目 我发现了一个函数,它将调用重复项并获得权重结果 我从总数

我意识到这可能已经以某种方式得到了回答,同时我将继续努力寻找解决方案。我只是希望得到一些关于处理这个问题的最佳方法的想法

我有一辆购物车。 我的网站将许多商店链接在一起。 我的网站是基于重量而不是数量。 我的手推车最大容量为28克

如果用户在购物车中有一个物品,并且他们决定增加重量。旧项目将替换为新项目

在此过程中,旧项目重量被添加到新项目重量中,然后添加到推车当前重量中。我需要在此过程中排除旧项目的重量,仅比较新项目和购物车中的其他项目

我发现了一个函数,它将调用重复项并获得权重结果

我从总数中减去这个数字,一切都很好

错了!我发现的获取重复项权重的函数,如果没有重复项,将返回false。现在,该函数位于另一个基于返回true或false的函数中。True表示项目已“添加”,false表示项目未“添加”。因此,当我的购物车是空的或没有重复项时,整个函数过早地以false结束

我之所以发布这篇文章,是因为我注意到有很多方法可以实现这一点,而且这些解决方案中有很多都已经有5年的历史了

这就是神奇发生的地方

<script>

simpleCart.bind('beforeAdd', function (item) {


    var existItem = simpleCart.has(item).get('weight');

    var multi_item = simpleCart.quantity();
    var cartweight = simpleCart.weight();
    var shopid = simpleCart.sid();
    var newweight = $( "div.item_weight" ).text();
    var itemid = $( "div.item_id" ).text();
    var totalweight = parseInt(cartweight) + parseInt(newweight) - parseInt(existItem);


if(shopid != null && shopid != <?=$shopid?> ){
    $( "#pop_fail_store" ).popup( "open" )
    return false;

        }else if (parseInt(totalweight)>=29){
            $( "#pop_fail_weight" ).popup( "open" )
            return false;

                }else if (simpleCart.has(item)){

                        $( "#pop_update" ).popup( "open" )
                            return true;


                                }else { 
                                    return true;
                                    }
        }); 

//SUCCESS       
simpleCart.bind( "afterAdd" , function( item ){
         $( "#pop_success" ).popup( "open" )
}); 

</script>
这些函数表示HAS EQUALS和GET

            has: function (item) {
                var match = false;

                simpleCart.each(function (testItem) {
                    if (testItem.equals(item)) {
                        match = testItem;
                    }
                });
                return match;
            }





me.equals = function (item) {
                    for( var label in _data ){
                        if (Object.prototype.hasOwnProperty.call(_data, label)) {
                            if (label !== 'quantity' && label !== 'id' && label !== 'price' && label !== 'weight') {
                                if (item.get(label) !== _data[label]) {
                                    return false;
                                }
                            }
                        }
                    }
                    return true;
                };








            me.get = function (name, skipPrototypes) {

                var usePrototypes = !skipPrototypes;

                if (isUndefined(name)) {
                    return name;
                }

                // return the value in order of the data object and then the prototype
                return isFunction(_data[name])  ? _data[name].call(me) :
                        !isUndefined(_data[name]) ? _data[name] :

                        isFunction(me[name]) && usePrototypes       ? me[name].call(me) :
                        !isUndefined(me[name]) && usePrototypes ? me[name] :
                        _data[name];
            };
我无法更改get、has或equals函数而不弄乱其他函数。我只需要它返回的值

我的第一个计划是将其移出“before add”函数,并将其保存为ready函数中的全局变量,然后在启动“before add”函数后调用它?这是最好的方式吗

阿贾克斯

创建一个新函数

或者我可以添加另一个if语句吗

选择的力量并不总是最好的。我相信有一个简单的答案在我面前

也许有人能告诉我最有效的方法

我的网站上的一个页面


提前谢谢

通过查看
SimpleCart.has()
SimpleCart.get()
函数的代码,您只需在使用它之前检查
has()
的输出

var hasItem = simpleCart.has(item);
var existItem = hasItem === false ? 0 : hasItem.get('weight');

这不只是一个分裂的问题吗?i、 e.
var hasItem=simpleCart.has(项目);var existItem=hasItem==false?0:hasItem.get('weight')我会试一试。你应该回答。。。这很有魅力。谢谢,我知道这很简单,就是看不见。这是我的购物车拼图的最后一块。
var hasItem = simpleCart.has(item);
var existItem = hasItem === false ? 0 : hasItem.get('weight');