2014-09-05 72 views
0

因此,我正在制定一个决策树,它只是从一个区域移动到另一个区域,我只有两个项目会影响到出来,但它们被用在9个不同的区域。jQuery决策树,是否有比这更便携的方式?

第一个是任务(a),第二个是材料(b),材料可以从一个部分更改为下一个部分。

所以prj1> A + B = C

但可以在一个项目中有很多任务,所以

A1 + B1 = C A2 + B2 = C

现在我正在使用该任务将展开下一个手风琴,该手风琴将具有一组新的单选按钮,每次任务更改选择时都必须复制该按钮。当这个改变时,我不得不重写我的jQuery,并且因为这是很多代码,我希望有一组新的眼睛告诉我是否有这样做的方式。

我的单选按钮看起来像这样...

<form id="first-metalE"> 
    <input class="first-metal" type="radio" name="firstE" value="1"> Copper<br> 
    <input class="first-metal" type="radio" name="firstE" value="2"> Brass<br> 
    <input id="alum-e" type="radio" name="firstE" value="8"> Aluminum<br> 
    <input id="stain-e" type="radio" name="firstE" value="4"> Stainless Steel 
    </form> 


    <form id="second-metalE"> 
    <input class="second-metal" type="radio" name="secondE" value="1"> Copper<br> 
    <input class="second-metal" type="radio" name="secondE" value="2"> Brass<br> 
    <input id="alum-e-two" type="radio" name="secondE" value="8"> Aluminum<br> 
    <input id="stain-e-two" type="radio" name="secondE" value="4"> Stainless Steel 
    </form> 

和我的jQuery看起来像这样...

 function setMetalElectric() { 

     // get value from the first radio button group and convert to number 
     var firstmtlE = $('input[name=firstE]:checked', '#first-metalE').val()*1; 

     // get value from the second radio button group and convert to number 
     var secondmtlE = $('input[name=secondE]:checked', '#second-metalE').val()*1;  

     // add results from first and second radio group  
     var mtlselectionE = firstmtlE + secondmtlE; 

     // P1 
     if ((mtlselectionE == 2) || (mtlselectionE == 3) || (mtlselectionE == 4)) { 

     alert(' directs to E1 '); 

     $('#metal-select').data('toggle', '#elec-cat-copperBrass'); 

     $('.prd-back').data('toggle', '#elec-cat-copperBrass'); 

     $('.attr-bck-to-mtl').data('toggle', '#electric-mtl'); 

     // P2 
     } else if ((mtlselectionE ==5) || (mtlselectionE ==6) || (mtlselectionE ==8)) { 

     alert(' directs to E2 '); 
     $('#metal-select').data('toggle', '#elec-cat-stainles'); 

     $('.plum-prd-back').data('toggle', '#elec-cat-stainles'); 

     $('.attr-bck-to-mtl').data('toggle', '#electric-mtl'); 

     // P3 
     } else if ((mtlselectionE ==9) || (mtlselectionE ==10) || (mtlselectionE ==16)) { 

     alert(' directs to E3 '); 

     $('#metal-select').data('toggle', '#elec-cat-alum'); 

     $('.plum-prd-back').data('toggle', '#elec-cat-alum'); 

     $('.attr-bck-to-mtl').data('toggle', '#electric-mtl'); 

     // errors 
     } else if ((mtlselectionE ==12)) { 

     alert(' Error '); 

     } else if ((mtlselectionE !=2,3,4,5,6,8,9,10,16)) { 

     alert(' You didnt select two metals '); 

     } else { alert('something is wrong')} ; 



     }; 

这是所有工作,我只是想,必须有一个更简单的方法,我已经使用了很多data-target =“”和jQuerys .data(),但是这个让我想知道是否有更简单的方法。

回答

1

这看起来像是使用switch声明的好机会。也许是这样的:

switch (expression){ 
    case "Copper": 
    //relevant code 
    break; 
    case "Brass": 
    //relevant code 
    break; 
    case "Aluminium": 
    //relevant code 
    break; 
    case "Stainless Steel": 
    //relevant code 
    break; 
    default: 
    //error handling 
}; 

虽然你仍然会拥有相当多的代码,这样你不会有你所创建的整数值系统打扰。

+0

看起来像一个体面的想法,我将不得不看看开关,以及如何使用它,并尝试应用到我的情况。谢谢! – phlipinmi 2014-09-05 14:06:40

+0

完成此工作后,我工作了另一个决策树并使用了开关,您说得对,它工作得非常好,我能够开发出高效的工作。 – phlipinmi 2014-09-28 23:59:08