2013-05-14 71 views
0

我有如下所示的複選框,顯示一週中的所有日子。驗證連續工作日複選框是否被選中

enter image description here

分別複選框的值是1,2,3,4,5,6,7

我需要在JavaScript驗證邏輯驗證用戶是否單擊連續天的複選框。連續的日子可以從任何一天開始。像,

週三,週四,週五,週六,週日(4,5,6,7,1)

週一,週二,週三,週四,週五,週六(2,3,4,5, 6,7)

週六,週日,週一,週二,週三,週四(7,1,2,3,4,5)

週二,週三,週四,週五,週六,週日(3, 4,5,6,7,1) 等

最少5天應選擇。用戶不應該被允許選擇像下面的例子:

週六,週日,週一,週三,週四(7,1,2,4,5)

週一,週三,週四,週五,週六( 2,4,5,6,7)

週二,週四,週五,週六,週日(3,5,6,7,1)

有什麼辦法來處理在JavaScript/jQuery的這個驗證?

+2

你能共享複選框的HTML – 2013-05-14 04:44:17

回答

1

如果你能選擇的值到一個數組,然後

function test(values){ 

    if(values.length !=5){ 
     return false; 
    } 

    var expected = values[0], valid = true; 
    $.each(values, function(i, v){ 
     if(expected != v){ 
      valid = false; 
      return false; 
     } 
     expected = v == 7 ? 1 : v + 1; 
    }) 

    if(!valid){ 
     return false; 
    } 

    return true; 
} 

演示:Fiddle

+0

感謝@Arun爲了這個簡單而合乎邏輯的答案。你的解決方案工作正常但是,填充陣列會給我帶來麻煩。如果我們選擇太陽,星期三,星期五,星期五,星期六(這是正確的順序),如果我們使用$,那麼它將返回1,4,5,6,7而不是4,5,6,7,1。那麼這個解決方案將無法工作。有沒有一種方法來填充數組,因爲我們需要使用$ .each? – Abilash 2013-05-14 06:57:21

0
function checkboxlimit(checkgroup, limit){ 
var checkgroup=checkgroup 
var limit=limit 
for (var i=0; i<checkgroup.length; i++){ 
    checkgroup[i].onclick=function(){ 
    var checkedcount=0 
    for (var i=0; i<checkgroup.length; i++) 
     checkedcount+=(checkgroup[i].checked)? 1 : 0 
    if (checkedcount>limit){ 
     alert("You can only select a maximum of "+limit+" checkboxes") 
     this.checked=false 
     } 
    } 
} 
} 

ADD這主體部分

checkboxlimit(document.forms.world.countries, 2) // here 2 states to select only two check box