2013-11-05 75 views
2

我創建了一個函數,將所有選中的項目放入一個文本區域..但我的問題是檢查項目的顯示被編入索引。複選框訂購Javascript

例如:

[X] checkbox1(第二蜱)
[X] checkbox2(第一打勾)
[X] checkbox3(第三蜱)

現在的顯示是這樣的

checkbox1 - > checkbox2 - > checkbox3

應該checkbox2 - > checkbox1 - > checkbox3

這裏是功能:

function checkTick() 
{ 

    $('input[type=checkbox]').change(function() { 
      var selectedvalue=[]; 
      $(":checkbox:checked").each(function(){ 

       selectedvalue.push($(this).attr("value")); 

      }); 
      document.getElementById('txtSignOff').value = selectedvalue.join("->"); 

     }); 

} 

回答

3

全球範圍:在全球範圍內設置變量selectedvalue。不要推送每個複選框值,只需按下當前複選框值。

取消選中時彈出的值:如果未選中/取消選中複選框,則應從數組中彈出相應的值,前提是數組中的所有值都應該是不同的。

var selectedvalue=[];  

    $('input[type=checkbox]').change(function() { 
       //If checked then push the value 
       if($(this).is(":checked")){ 
        selectedvalue.push($(this).attr("value")); 
       }else{ 
        //This is what pops the value from the array when the checkbox is unchecked. 
        selectedvalue.splice(selectedvalue.indexOf($(this).attr("value")),1); 
       } 
       document.getElementById('txtSignOff').value = selectedvalue.join("->");  
    }); 

功能blockizing:你不需要它blockize到函數checkTick。 jQuery實用程序在發生事件時爲您提供這樣的事情。

0

你正在做的正確,但你的變量被覆蓋,所以它的值不正確。讓全球

var selectedvalue=[]; 

另外重要的一點是「這裏沒有必要做。每次每一個複選框」

現在的功能

function checkTick() 
{ 
    $('input[type=checkbox]').change(function() { 
      selectedvalue.push($(this).attr("value")); 
      document.getElementById('txtSignOff').value = selectedvalue.join("->"); 

     }); 
} 
+0

檢查時,才應推動和需求在取消選中時從陣列中移除。 – thelsdj