Javascript Jquery,分离两个相互干扰的函数并相互传递变量的最佳方法是什么?
我意识到这可能已经以某种方式得到了回答,同时我将继续努力寻找解决方案。我只是希望得到一些关于处理这个问题的最佳方法的想法 我有一辆购物车。 我的网站将许多商店链接在一起。 我的网站是基于重量而不是数量。 我的手推车最大容量为28克 如果用户在购物车中有一个物品,并且他们决定增加重量。旧项目将替换为新项目 在此过程中,旧项目重量被添加到新项目重量中,然后添加到推车当前重量中。我需要在此过程中排除旧项目的重量,仅比较新项目和购物车中的其他项目 我发现了一个函数,它将调用重复项并获得权重结果 我从总数中减去这个数字,一切都很好 错了!我发现的获取重复项权重的函数,如果没有重复项,将返回false。现在,该函数位于另一个基于返回true或false的函数中。True表示项目已“添加”,false表示项目未“添加”。因此,当我的购物车是空的或没有重复项时,整个函数过早地以false结束 我之所以发布这篇文章,是因为我注意到有很多方法可以实现这一点,而且这些解决方案中有很多都已经有5年的历史了 这就是神奇发生的地方Javascript Jquery,分离两个相互干扰的函数并相互传递变量的最佳方法是什么?,javascript,jquery,ajax,simplecart,Javascript,Jquery,Ajax,Simplecart,我意识到这可能已经以某种方式得到了回答,同时我将继续努力寻找解决方案。我只是希望得到一些关于处理这个问题的最佳方法的想法 我有一辆购物车。 我的网站将许多商店链接在一起。 我的网站是基于重量而不是数量。 我的手推车最大容量为28克 如果用户在购物车中有一个物品,并且他们决定增加重量。旧项目将替换为新项目 在此过程中,旧项目重量被添加到新项目重量中,然后添加到推车当前重量中。我需要在此过程中排除旧项目的重量,仅比较新项目和购物车中的其他项目 我发现了一个函数,它将调用重复项并获得权重结果 我从总数
<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');