2016-04-26 39 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。我不完全確定這是否可以實現。 –

相關問題