bootstrap 多选插件无法在多页上正确验证
bootstrap multiselect plugin is not validating properly on multipage
我正在创建一个多页表单并使用 davidstutz bootstrap multiselect 插件作为 select 选项。我在第一页使用 2 multiselect,在第三页使用 2。最初它验证良好,但如果我在到达第三页后返回到前几页,下一个按钮将停止工作,因为它也在验证第三页上的 multiselect。
这是用于 multiselect 的代码:
$('#divisionList').multiselect({
maxHeight: 150,
//enableCaseInsensitiveFiltering: true,
numberDisplayed: 1,
nonSelectedText: '--Select Division--',
disableIfEmpty: true,
buttonClass: 'btn btn-default',
buttonContainer: '<div class="btn-group btn-group-justified" />',
//disabledText: 'There is no WorkItem SubHead...'
onChange: function (element, checked) {
$(element).closest('.multiselect').valid();
if (checked === true) {
$(document).click();
} else if (checked === false) {
}
},
templates: {
button: '<a type="button" class="multiselect dropdown-toggle multiselect-title-text" style="width:95%;" data-toggle="dropdown"><span class="multiselect-selected-text"></span></a><a type="button" class="multiselect dropdown-toggle" style="width:5%;" data-toggle="dropdown"><span class="caret"></span></a>'
}
});
验证:
$('#addDbaProjectForm').validate({ // initialize plugin
ignore: ':hidden:not(".multiselect")', //.multiselect is the class of select tag
rules: {
districtList: "required",
divisionList: "required",
projectName: {
required: true,
noSpace: true
},
subProjectName: {
required: true,
noSpace: true
},
chainageOfProject: {
required: true,
noSpace: true
}
}
});
下一个按钮的作用如下:
//Step 1
if (current == 1) {
// Check validation
if ($('#addDbaProjectForm').valid()) {
widget.show();
widget.not(':eq(' + (current++) + ')').hide();
setProgress(current);
}
}
工作 Fiddle - https://jsfiddle.net/bdq4a86o/13/
1) 对您的 fiddle 所做的更改:
1) 从 rawgit.com 为 bootstrap-multiselect.js 和 bootstrap-multiselect.css 文件添加了生产 URL。
2) 将 IIF
替换为 If
2) 您需要在代码中进行的更改:
1) 根据步骤对表单中的控件进行分组,为第 1 步控件添加 class "step1",为第 2 步控件添加 "step2" class
<select class="form-control multiselect step1" name="districtList" id="districtList">
<option value="">--Select--</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
2) 单击 "next" 按钮时,您只需要验证该部分。所以你需要在每个 classes 上调用 .valid() 方法。例如:- if ($('.step1').valid())
//Step 1
if (current == 1) {
// Check validation
if ($('.step1').valid()) {
widget.show();
widget.not(':eq(' + (current++) + ')').hide();
setProgress(current);
}
}
//Step 2
else if (current == 2) {
if($('.step2').valid()) {
widget.show();
widget.not(':eq(' + (current++) + ')').hide();
setProgress(current);
}
}
//Step 3
else if (current == 3) {
if ($('.step3').valid()) {
widget.show();
widget.not(':eq(' + (current++) + ')').hide();
setProgress(current);
}
}
3) 需要相应添加跳过按钮的代码。
我正在创建一个多页表单并使用 davidstutz bootstrap multiselect 插件作为 select 选项。我在第一页使用 2 multiselect,在第三页使用 2。最初它验证良好,但如果我在到达第三页后返回到前几页,下一个按钮将停止工作,因为它也在验证第三页上的 multiselect。
这是用于 multiselect 的代码:
$('#divisionList').multiselect({
maxHeight: 150,
//enableCaseInsensitiveFiltering: true,
numberDisplayed: 1,
nonSelectedText: '--Select Division--',
disableIfEmpty: true,
buttonClass: 'btn btn-default',
buttonContainer: '<div class="btn-group btn-group-justified" />',
//disabledText: 'There is no WorkItem SubHead...'
onChange: function (element, checked) {
$(element).closest('.multiselect').valid();
if (checked === true) {
$(document).click();
} else if (checked === false) {
}
},
templates: {
button: '<a type="button" class="multiselect dropdown-toggle multiselect-title-text" style="width:95%;" data-toggle="dropdown"><span class="multiselect-selected-text"></span></a><a type="button" class="multiselect dropdown-toggle" style="width:5%;" data-toggle="dropdown"><span class="caret"></span></a>'
}
});
验证:
$('#addDbaProjectForm').validate({ // initialize plugin
ignore: ':hidden:not(".multiselect")', //.multiselect is the class of select tag
rules: {
districtList: "required",
divisionList: "required",
projectName: {
required: true,
noSpace: true
},
subProjectName: {
required: true,
noSpace: true
},
chainageOfProject: {
required: true,
noSpace: true
}
}
});
下一个按钮的作用如下:
//Step 1
if (current == 1) {
// Check validation
if ($('#addDbaProjectForm').valid()) {
widget.show();
widget.not(':eq(' + (current++) + ')').hide();
setProgress(current);
}
}
工作 Fiddle - https://jsfiddle.net/bdq4a86o/13/
1) 对您的 fiddle 所做的更改:
1) 从 rawgit.com 为 bootstrap-multiselect.js 和 bootstrap-multiselect.css 文件添加了生产 URL。
2) 将 IIF
替换为 If
2) 您需要在代码中进行的更改:
1) 根据步骤对表单中的控件进行分组,为第 1 步控件添加 class "step1",为第 2 步控件添加 "step2" class
<select class="form-control multiselect step1" name="districtList" id="districtList">
<option value="">--Select--</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
2) 单击 "next" 按钮时,您只需要验证该部分。所以你需要在每个 classes 上调用 .valid() 方法。例如:- if ($('.step1').valid())
//Step 1
if (current == 1) {
// Check validation
if ($('.step1').valid()) {
widget.show();
widget.not(':eq(' + (current++) + ')').hide();
setProgress(current);
}
}
//Step 2
else if (current == 2) {
if($('.step2').valid()) {
widget.show();
widget.not(':eq(' + (current++) + ')').hide();
setProgress(current);
}
}
//Step 3
else if (current == 3) {
if ($('.step3').valid()) {
widget.show();
widget.not(':eq(' + (current++) + ')').hide();
setProgress(current);
}
}
3) 需要相应添加跳过按钮的代码。