jquery每个都不能很好地工作,有时它会产生良好的结果,有时它不会

时间:2014-04-25 02:28:54

标签: javascript jquery

我有一个网站,在将产品添加到购物车之前,用户必须选择插件。这些插件分为两部分。我使用选择框插件(仅需要1个选项时)和1个具有多个插件的组进行分组,其中用户可以选择多个复选框。复选框工作正常,但选择框选项除外。选择框自动填充。 (smarty的):

            {if $menuaddonslist[add].mainaddonsname neq '' && $menuaddonslist[add].mainaddonsnamecnt eq 1}
                {$objSearchDetails->menuSubAddonsList($menuaddonslist[add].addonparentid,$menuaddonslist[add].menuaddons_menuid)}
                    <div class="single" id="singleAddon-{$menuaddonslist[add].addonparentid}">
                    <span class="addonTitle">{$menuaddonslist[add].mainaddonsname|stripslashes}</span>
                    <input type="hidden" name="singleopt" class="singleopt" id="singleopt" value="single">
                    <select class="popNameInput" name="addonstype_{$menuSubaddonslist_cnt}_{$smarty.section.subadd.rownum}" style="border: 1px solid #dedede;margin-bottom:15px;width:230px;">
                    {section name="subadd" loop=$menuSubaddonslist}
                        {if $menuSubaddonslist[subadd].subaddonsname neq ''}
                            {if $menuaddonslist[add].mainaddonsnamecnt eq '1'}
                            <option value="{$menuSubaddonslist[subadd].menuaddons_id}">
                              {$menuSubaddonslist[subadd].subaddonsname|ucfirst|stripslashes}
                                {if $menuSubaddonslist[subadd].menuaddons_priceoption eq 'Paid'} 
                                (+&nbsp;&#8364;{$menuSubaddonslist[subadd].menuaddons_price} )
                                {/if}
                            </option>
                            {/if}
                         {/if}
                    {/section}
                    </select>
                    </div>
                    <div style="clear:both"></div>

这将输出最少1个选择框,最多可输出任意数量的值。一切正常。

现在,当用户点击添加到购物车时,所有这些插件都会添加到购物车中。在javascript中,我有2个数组,其中包含插件的值(id's)

现在这是奇怪的部分。在网站上,当我打开弹出窗口,看到插件并点击添加到购物车,有时它的工作..有时“插件”var是未定义的...我可以打开相同的弹出窗口10次,并在那10次2时间插件将被添加正常,另外8次插件阵列再次未定义我不知道这里是代码:

//Add To Cart
function addToMenu(resfea){

    var menuid        = $("#menuid").val();
    var resid         = $("#restid").val();
    var quantity      = $("#qty").val();
    //var menuspl_ins   = $("#splins").val();
    var menuspl_ins       = check_undefined(menuspl_ins);
    //var offer       = $("#offer").val();
    var offer         = check_undefined(offer);

        $.post(jssitebaseUrl+'/ajaxFile.php',{"menuid":menuid,"action":"checkCategoryName"},function(response){
        //alert(response);

            var sizeoption  = $("#sizeoption").val();

            if(sizeoption == 'fixed'){
                var menuprice     = $("#menuprice").val();
            }

            var addonstype1   = $("#addonstype1").val();
            //alert(addonstype1);
            if(addonstype1 > 0){

                var multipleoption   = $("#multipleopt").val();
                var singleoption     = $("#singleopt").val();
                var singleoptioncnt  = $("#singleoptcnt").val();

                if(singleoption == 'single'){
                    var AddonstypeSingle=[];

                    $("select[name^=addonstype_] option:selected").each(function(){
                        //var singleSelect = $("select").val;
                        if (this.value != "") {
                    ---->THIS MUST ALWAYS ALERT SOME ID WHEN THERE ARE SELECT BOXES//alert(this.value);
                            AddonstypeSingle.push(this.value);
                        }
                    });
                }

                if(multipleoption == 'multiple'){
                //Check Box Value
                    var totaddonsid = document.orderpop.addonstype.length;
                    if(totaddonsid == undefined){
                        if(document.orderpop.addonstype.checked==true){
                            addonstype=document.orderpop.addonstype.value;
                        }
                        var Addonsmul=addonstype;   
                        if( Addonsmul !='' ){
                            var Addonstypemultiple = Addonsmul+',';
                        }
                    }else{
                        if(totaddonsid > 0){
                            var addonstype=new Array();
                            var j=0;
                            for(var i=0;i<totaddonsid;i++){
                                if(document.orderpop.addonstype[i].checked==true){
                                    addonstype[j]=document.orderpop.addonstype[i].value;
                                    j++;
                                }
                            }
                            var Addonsmul=addonstype;   
                            if( Addonsmul !='' ){
                                var Addonstypemultiple = Addonsmul+',';
                            }
                        }
                    }
                }

                if(Addonstypemultiple == undefined){
                    var Addons = AddonstypeSingle;
                }
                else if(AddonstypeSingle == undefined){
                    var Addons = Addonstypemultiple;
                }
                else{
                    var Addons = Addonstypemultiple+AddonstypeSingle;
                }
            }
            //alert(Addons); <-- RETURNS UNDEFINED WHEN THE SELECTBOX VALUES ARE NOT ALERTED


            Addons              = check_undefined(Addons);
            menuprice           = check_undefined(menuprice);
            $('.restaurantMenuAddtocartmm').load(jssitebaseUrl+"/ajaxAction.php?menuid="+menuid+"&offer="+offer+"&resid="+resid+"&menuprice="+menuprice+"&Addons="+Addons+"&quantity="+quantity+"&action=addtoItem", { 'menuspl_ins':menuspl_ins });

        });
        return false;
}

var AddonstypeSingle = []如果有选择框,则不能为空,但奇怪的是..有时它会提醒ids很好,有时它不会发出警报或未定义警报。所以由于某种原因,每个都不会像它应该的那样一直工作......

我尝试了所有的东西,但由于某种原因,它添加插件就好了,然后它只是不添加它们等我花了几个小时,我仍然没有线索,我希望有人可以带领我朝着正确的方向

1 个答案:

答案 0 :(得分:0)

这是一个关闭问题。

在这部分:

 if(Addonstypemultiple == undefined){
                var Addons = AddonstypeSingle;
            }
            else if(AddonstypeSingle == undefined){
                var Addons = Addonstypemultiple;
            }
            else{
                var Addons = Addonstypemultiple+AddonstypeSingle;
            }
        }
        //alert(Addons); <-- RETURNS UNDEFINED WHEN THE SELECTBOX VALUES ARE NOT ALERTED

您正在if的函数中定义var插件。这不适用于您的提醒功能。我可以建议一个简单的解决方案:

 var Addons;

 if(Addonstypemultiple == undefined){
                Addons = AddonstypeSingle;
            }
            else if(AddonstypeSingle == undefined){
                Addons = Addonstypemultiple;
            }
            else{
                Addons = Addonstypemultiple+AddonstypeSingle;
            }
        }
        alert(Addons);