2016-04-03 83 views
0

親愛的Javascript專業的,jQuery驗證字段名稱包含括號的組

我有一個HTML表單,其中包含兩組複選框。其中一個組包含複選框,其中應檢查通過jQuery驗證。另一組不是強制選擇。

First group (at least one checkbox should be selected): 
<input type="checkbox" name="appSourceFirstoption[1]" value="Answer 1" id="appSourceFirstoption" /> 
<input type="checkbox" name="appSourceSecondoption[1]" value="Answer 2" id="appSourceSecondoption" /> 
<input type="checkbox" name="appSourceThirdoption[1]" value="Answer 3" id="appSourceThirdoption" /> 


Second group (these checkboxes are voluntary to select): 
<input type="checkbox" name="appSourceVoluntaryFirst[1]" value="Answer 1" id="appSourceVoluntaryFirst" /> 
<input type="checkbox" name="appSourceVoluntarySecond[1]" value="Answer 2" id="appSourceVoluntarySecond" /> 
<input type="checkbox" name="appSourceVoluntaryThird[1]" value="Answer 3" id="appSourceVoluntaryThird" /> 

複選框的名稱包含數組符號,例如, checkboxName [1](「1」表示填寫表單的人員)。

現在這個完美的作品:

$.validator.addMethod('checkbox', function(value) { 
    return $('input[type=checkbox]:checked').size() > 0; 
    }, 'Please select at least one.'); 

,但它適用於所有的複選框(因此,即使一個複選框,從第二志願組的驗證可以通過)的。

如果我嘗試將強制複選框分組,它不起作用。我想這可能是由於他們的名字包含[],如上所述。

// adding the group 
    $.validator.addMethod("checkbox_1", function(value, element) { 
    return $('.checkbox_1:checked').length > 0; 
    }, 'Please select at least one.'); 


    $('#step').validate({ 

    // grouping the checkboxes together 
    groups: { 
    checkbox_1: "appSourceFirstoption[1] appSourceSecondoption[1] appSourceThirdoption[1]" 
    }, 

    // applying the group rules to just one of the checkbox 
    "appSourceFirstoption[1]" : { checkbox_1: true }, 
    } 

你們有什麼想法我怎麼能解決這個問題?

+0

你能不能請添加你的html代碼片段 –

+0

根據請求添加了HTML。 – BigRooster

+0

由於複選框已經是組的一部分,因此給它們所有'name'屬性,其中大部分完全沒有實際意義。你甚至不需要自定義方法:https://jsfiddle.net/ffk1ubnz/ – Sparky

回答

0

1)你是缺少 「規則」 選項,

rules: { 
     "appSourceFirstoption[1]": { checkbox_1: true } 
     } 

2)改變$('.checkbox_1:checked').length > 0;

$('input[type=checkbox]:checked').length > 0; 

全碼

$(document).ready(function() { 


$('#step').validate({ 

    // grouping the checkboxes together 
    groups: { 
       checkbox_1: "appSourceFirstoption[1] appSourceSecondoption[1] appSourceThirdoption[1]" 
      }, 

    // applying the group rules to just one of the checkbox 
    rules: { 
       "appSourceFirstoption[1]": { checkbox_1: true } 
      } 
}); 

$.validator.addMethod("checkbox_1", function (value, element) { 
    return $('input[type=checkbox]:checked').length > 0; 
}, 'Please select at least one.'); 


}); 

工作提琴。 - https://jsfiddle.net/8ukbf3wy/