2011-03-14 83 views
0

我将一些工作完美无瑕但却非常丑陋的代码入侵了,我想学会清理它。根据jQuery中的单选按钮选择的数量显示/隐藏1-5个输入框需要清理

有没有人有更好的建议,那么这种方法?我使用了一些属性选择器来减少重复,但是我仍然需要为每个硬件设置一个大块(现在有4个)。我想我可以使用硬件变量的循环?

$('input[name="hwA-qty"]').click(function(){ 
    var selected = $(this).val(); 
    if (selected == 1) { //Hide inputs 2-5 
     $('fieldset[id^="hwA"]').hide(); 
    } 
    if (selected == 2) { //Show inputs 1 & 2 
     $('fieldset#hwA-2').show(); 
     $('fieldset#hwA-3').hide(); 
     $('fieldset#hwA-4').hide(); 
     $('fieldset#hwA-5').hide(); 
    } 
    if (selected == 3) { //Show inputs 1-3 
     $('fieldset#hwA-2').show(); 
     $('fieldset#hwA-3').show(); 
     $('fieldset#hwA-4').hide(); 
     $('fieldset#hwA-5').hide(); 
    } 
    if (selected == 4) { //Show inputs 1-4 
     $('fieldset#hwA-2').show(); 
     $('fieldset#hwA-3').show(); 
     $('fieldset#hwA-4').show(); 
     $('fieldset#hwA-5').hide(); 
    } 
    if (selected == 5) { //Show all inputs 
     $('fieldset[id^="hwA"]').show(); 
    } 
}); 
$('input[name="hwB-qty"]').click(function(){ 
    var selected = $(this).val(); 
    if (selected == 1) { 
     $('fieldset[id^="hwB"]').hide(); 
    } 
    if (selected == 2) { 
     $('fieldset#hwB-2').show(); 
     $('fieldset#hwB-3').hide(); 
     $('fieldset#hwB-4').hide(); 
     $('fieldset#hwB-5').hide(); 
    } 
    if (selected == 3) { 
     $('fieldset#hdPvr2').show(); 
     $('fieldset#hdPvr3').show(); 
     $('fieldset#hdPvr4').hide(); 
     $('fieldset#hdPvr5').hide(); 
    } 
    if (selected == 4) { 
     $('fieldset#hdPvr2').show(); 
     $('fieldset#hdPvr3').show(); 
     $('fieldset#hdPvr4').show(); 
     $('fieldset#hdPvr5').hide(); 
    } 
    if (selected == 5) { 
     $('fieldset[id^="sdPvr"]').show(); 
    } 
}); [...] 

而这里的HTML:

[...] 
<div class="hardwareValidation"> 

<div class="select"> 
    <label for="hwA-qty">Quantity</label><br /> 
    <label>1 <input type="radio" name="hwA-qty" value="1" checked /></label> 
    <label>2 <input type="radio" name="hwA-qty" value="2" /></label> 
    <label>3 <input type="radio" name="hwA-qty" value="3" /></label> 
    <label>4 <input type="radio" name="hwA-qty" value="4" /></label> 
    <label>5 <input type="radio" name="hwA-qty" value="5" /></label> 
</div> 

<fieldset id="hwA-1"> 
    <div class="input"> 
     <label for="hwA-1-serial">#1 - Box Serial Number</label><br /> 
     <input type="text" name="hwA-1-serial" id="hwA-1-serial" /> 
    </div> 
    <div class="checkbox"> 
     <label> 
      <input type="checkbox" name="hwA-1-override" value=""> Override Validation 
     </label> 
    </div> 
</fieldset>      

<fieldset id="hwA-2"> 
    <div class="input"> 
     <label for="hwA-2-serial">#2 - Box Serial Number</label><br /> 
     <input type="text" name="hwA-2-serial" id="hwA-2-serial" /> 
    </div> 
    <div class="checkbox"> 
     <label> 
      <input type="checkbox" name="hwA-2-override" value=""> Override Validation 
     </label> 
    </div> 
</fieldset> 

</div> [...] 
+0

你也可以考虑使用jQuery根据需要动态地添加尽可能多的输入字段。如果你不使用它们,它们不需要存在于HTML标记中。 – 2011-03-14 14:19:03

回答

1
$('input[name="hwA-qty"]').click(function(){ 
var selected = $(this).val(); 

for(i=1;i<=5;i++){ 
    if(i<=selected)$('fieldset#hwA-'+i).show(); 
    else $('fieldset#hwA-'+i).hide(); 
} 

}

+0

谢谢,这太好了。但它只隐藏了最后的元素。 所以,如果我选择“5”,5输入显示。然后我点击“2”,只有最后一个输入被删除,所以剩下4个。我想我需要添加条件来隐藏输入。 – lazyronin 2011-03-14 13:54:24

+0

似乎为我工作... http://jsfiddle.net/PH7vM/ – 2011-03-14 14:16:16

+0

哇我的坏,犯了一个错字。非常感谢! – lazyronin 2011-03-14 14:19:08

0

你可以使用nextAll穿越方法,即选择匹配的元素下面的兄弟姐妹。

$('input[name="hwA-qty"]').click(function(){ 
     var selected = $(this).val(); 
     $("fieldset[id^='hwA-']").show(); 
     $("#hwA-" + selected).nextAll().hide(); 
    }); 

$('input[name="hwA-qty"]:checked').trigger("click"); // Triggers the click event to set to the initial position 

参见:http://jsfiddle.net/GlauberRocha/s4PAG/1/

+0

谢谢,我会研究这种方法。以前没有听说过。 – lazyronin 2011-03-14 13:57:48

相关问题