2016-04-26 38 views
0

我有10个复选框。当用户选择第一个复选框时,标签出现“a)”。在它旁边。在选择第二个复选框时,此标签更改为“b”。“如果与新选择相比,复选框的排列顺序较低,并且新复选框的标签为“a”。“反之亦然。如何根据用户选择动态更改多个复选框的编号?

我已经找到了一种方法来做到这一点,通过使用二进制的方法,我检查是否第一,第二被选中,然后第三是“c)”。如果不是那么“b)”。或“a”。“但是当这个逻辑变大时,这个逻辑变得太大而且效率低下。的复选框进来

有人能帮我找到一个更好的逻辑吗?

这里是一个示例代码

var a= optionA.header.CheckBox4.rawValue; 
var b= optionB.header.CheckBox4.rawValue; 
var c= optionC.header.CheckBox4.rawValue; 
var d= optionD.header.CheckBox4.rawValue; 
if(this.rawValue == 1) 
{ 
    if(a==0 && b==0 && c==0 && d==0) 
     optionE.number = "c)"; 
    else if(a==0 && b==0 && c==0 && d==1) 
     optionE.number = "d)"; 
    else if(a==0 && b==0 && c==1 && d==0) 
     optionE.number = "d)";  
    else if(a==0 && b==1 && c==0 && d==0) 
     optionE.number = "d)"; 
    else if(a==1 && b==0 && c==0 && d==0) 
     optionE.number = "d)"; 
    else if(a==1 && b==1 && c==0 && d==0) 
     optionE.number = "e)"; 
    else if(a==1 && b==0 && c==1 && d==0) 
     optionE.number = "e)";  
    else if(a==1 && b==0 && c==0 && d==1) 
     optionE.number = "e)"; 
    else if(a==0 && b==1 && c==0 && d==1) 
     optionE.number = "e)"; 
    else if(a==0 && b==1 && c==1 && d==0) 
     optionE.number = "e)"; 
    else if(a==0 && b==0 && c==1 && d==1) 
     optionE.number = "e)";  
    else if(a==1 && b==1 && c==1 && d==0) 
     optionE.number = "f)";  
    else if(a==1 && b==0 && c==1 && d==1) 
     optionE.number = "f)";  
    else if(a==1 && b==1 && c==0 && d==1) 
     optionE.number = "f)";  
    else if(a==0 && b==1 && c==1 && d==1) 
     optionE.number = "f)";  
    else if(a==1 && b==1 && c==1 && d==1) 
     optionE.number = "g)";  
} 
else 
{ 
    optionE.number = "";  
} 
+2

我们如何执行你的代码? – Rayon

+0

这是Adobe Livecycle中使用的JavaScript。 –

+0

你可以发布你的代码吗? – callback

回答

0

代码的algorithmus可以被替换为:

switch(a+b+c+d) { 
case 0: optionE.number = "c)"; break; 
case 1: optionE.number = "d)"; break; 
case 2: optionE.number = "e)"; break; 
case 3: optionE.number = "f)"; break; 
case 4: optionE.number = "g)"; break; 
} 
+0

太棒了!谢谢,这应该就像一个魅力! –

0

我不知道你真正的意思,我的理解,最新选中的复选框是 'A',下一个最新的是 'b',....

如果我的理解是正确的,你可以试试这个:

var 
 
cbArr = [], 
 
charArr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']; 
 

 
$(':checkbox').change(function() { 
 
    var $this = $(this); 
 

 
    if ($this.is(':checked')) { // If checked, add element to end of array 
 
    cbArr.push(this); 
 
    } else { 
 
    \t cbArr.splice(cbArr.indexOf(this), 1) // If not checked, remove element 
 
    } 
 

 
    $(':checkbox ~ label').text(''); 
 
    $.each(cbArr, function(i, v) { 
 
    var charIdx = cbArr.length - i - 1; // Get letter index 
 
    $(v).next('label').text(charArr[charIdx]); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="checkbox" id="cb-1"> 
 
<label for="cb-1"></label> 
 
<br> 
 
<input type="checkbox" id="cb-2"> 
 
<label for="cb-2"></label> 
 
<br> 
 
<input type="checkbox" id="cb-3"> 
 
<label for="cb-3"></label> 
 
<br> 
 
<input type="checkbox" id="cb-4"> 
 
<label for="cb-4"></label> 
 
<br> 
 
<input type="checkbox" id="cb-5"> 
 
<label for="cb-5"></label> 
 
<br> 
 
<input type="checkbox" id="cb-6"> 
 
<label for="cb-6"></label> 
 
<br> 
 
<input type="checkbox" id="cb-7"> 
 
<label for="cb-7"></label> 
 
<br> 
 
<input type="checkbox" id="cb-8"> 
 
<label for="cb-8"></label> 
 
<br> 
 
<input type="checkbox" id="cb-9"> 
 
<label for="cb-9"></label> 
 
<br> 
 
<input type="checkbox" id="cb-10"> 
 
<label for="cb-10"></label> 
 
<br>

+0

嗨,让我告诉你,你正在给JavaScript代码支持HTML,其中我的代码是Adobe Livecycle,它也使用JavaScript。我不完全确定这是否可以实现。 –

相关问题