朋友们,我用hide()和show()创建了一个简单的指南系统。在每个指南(动态列出)中,将有多个复选框(也动态列出)。
用户不需要选中任何复选框,但每个选项卡的maxlength都不同。那就是问题所在。
示例:
第一个标签:maxlength:4 第二个标签:maxlength:1
假设用户在第一个选项卡上选择了4个字段,当他第二个并选择一个字段时,系统会显示错误,因为记录就好像用户选择了5,即超过限制。
我该如何解决这个问题?
我的代码:
$("#menu_dias li").first().addClass('current selecionado');
var maximo = $("#menu_dias li.current").first().data('total');
var dia = $("#menu_dias li.current").first().data('dia');
$("#maximo").val(maximo);
$("#iddia").val($("#menu_dias li.current").first().data('id'));
$("#signup").validate({
rules: {
'idatividade[]': {
required: false,
maxlength: maximo
}
},
messages: {
'idatividade[]': {
required: "Você precisa selecionar no mínimo {1} opções",
maxlength: "Check no more than {1} boxes"
}
},
errorPlacement: function (error, element) {
$('div.aviso').text("Você não pode selecionar mais que "+maximo+" atividades.");
$('div.aviso').fadeIn("slow");
$('div.aviso').delay(2000).fadeOut("slow");
}
});
$('.data').text(dia);
$("#enviar").hide();
$("#prev").hide();
$("body").on("keyup", "form", function(e){
if (e.which == 13){
if ($("#next").is(":visible") && $("fieldset.current").find("input, textarea").valid() ){
e.preventDefault();
nextSection();
return false;
}
}
});
$("#next").on("click", function(e){
if ($("#next").is(":visible") && $("fieldset.current").find("input, textarea").valid() ){
e.preventDefault();
nextSection();
maximo = $("#menu_dias li.current").data('total');
$('.data').text($("#menu_dias li.current").data('dia'));
$("#maximo").val(maximo);
$("#iddia").val($("#menu_dias li.current").data('id'));
return false;
}
});
$("form").on("submit", function(e){
if ($("#next").is(":visible") || $("fieldset.current").index() < $("fieldset").last().index() || !$("fieldset.current").find("input, textarea").valid()){
e.preventDefault();
return false;
}
});
$("#prev").on("click", function(e){
if ($("fieldset.current").index() != $("fieldset").first().index()){
e.preventDefault();
prevSection()
maximo = $("#menu_dias li.current").data('total');
$('.data').text($("#menu_dias li.current").data('dia'));
$("#maximo").val(maximo);
$("#iddia").val($("#menu_dias li.current").data('id'));
return false;
}
});
function nextSection(){
var i = $("fieldset.current").index();
if (i < $("fieldset").last().index()){
$("#menu_dias li").eq(i+1).addClass("selecionado");
goToSection(i+1);
}
}
function prevSection(){
var i = $("fieldset.current").index();
if (i <= $("fieldset").last().index()){
$("#menu_dias li").eq(i-1).addClass("selecionado");
goToSection(i-1);
}
}
$("#menu_dias li").on("click", function(e){
var i = $(this).index();
console.log(i);
if ($(this).hasClass("selecionado")){
goToSection(i);
maximo = $("#menu_dias li.current").data('total');
dia = $("#menu_dias li.current").data('dia');
$("#maximo").val(maximo);
$("#iddia").val($("#menu_dias li.current").data('id'));
} else {
alert("Selecione as opções primeiro.");
}
});
function goToSection(i){
$("fieldset:gt("+i+")").removeClass("current").addClass("next");
$("li").eq(i).addClass("current").siblings().removeClass("current");
$("fieldset").eq(i).removeClass("next").addClass("current selecionado");
$("fieldset:lt("+i+")").removeClass("current").addClass("next");
if ($("fieldset.current").index() == $("fieldset").last().index()){
$("#next").hide();
$("input[type=submit]").show();
} if ($("fieldset.current").index() != $("fieldset").first().index()){
$("#prev").show();
}else {
$("#next").show();
$("input[type=submit]").hide();
}
}
HTML:
<form id="signup" action="admprecadastro.php" method="POST">
<fieldset id="grid" class="current selecionado">
<table cellpadding="1" cellspacing="1" width="100%" id="atividades">
<tr>
<td>
Checkbox
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="idatividade[]" value="1" id="idatividade"/>
<input type="checkbox" name="idatividade[]" value="2" id="idatividade"/>
<input type="checkbox" name="idatividade[]" value="3" id="idatividade"/>
<input type="checkbox" name="idatividade[]" value="4" id="idatividade"/>
<input type="checkbox" name="idatividade[]" value="5" id="idatividade"/>
</td>
</tr>
</table>
</fieldset>
<fieldset id="grid" class="next">
<table cellpadding="1" cellspacing="1" width="100%" id="atividades">
<tr>
<td>
Checkbox
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="idatividade[]" value="6" id="idatividade"/>
<input type="checkbox" name="idatividade[]" value="7" id="idatividade"/>
<input type="checkbox" name="idatividade[]" value="8" id="idatividade"/>
<input type="checkbox" name="idatividade[]" value="9" id="idatividade"/>
<input type="checkbox" name="idatividade[]" value="10" id="idatividade"/>
</td>
</tr>
</table>
</fieldset>
<fieldset id="grid" class="next">
<table cellpadding="1" cellspacing="1" width="100%" id="atividades">
<tr>
<td>
Checkbox
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="idatividade[]" value="11" id="idatividade"/>
<input type="checkbox" name="idatividade[]" value="12" id="idatividade"/>
<input type="checkbox" name="idatividade[]" value="13" id="idatividade"/>
<input type="checkbox" name="idatividade[]" value="14" id="idatividade"/>
<input type="checkbox" name="idatividade[]" value="15" id="idatividade"/>
</td>
</tr>
</table>
</fieldset>
<div class="botoes">
<input type="hidden" name="maximo" id="maximo"/>
<div class="seguinte">
<a class="btn" id="next">Próximo</a>
<input type="submit" id="enviar" value="Enviar">
</div>
</div>
</form>
<script type="text/javascript">
$("#idatividade").rules("add", { max: $("#maximo").val()});
</script>
答案 0 :(得分:0)
在您的JavaScript中,您不会删除当前的&#39;您正在导航的选项卡中的类。所以在函数goToSection:
$("fieldset:gt("+i+")").removeClass("current").addClass("next");
$("li").eq(i).addClass("current").siblings().removeClass("current");
变为:
$("fieldset:gt("+i+")").removeClass("current").addClass("next");
$("fieldset:lt("+i+")").removeClass("current");
$("li").eq(i).addClass("current").siblings().removeClass("current");
或者,如果您有以前的&#39;类:
$("fieldset:gt("+i+")").removeClass("current").addClass("next");
$("fieldset:lt("+i+")").removeClass("current").addClass("previous");
$("li").eq(i).addClass("current").siblings().removeClass("current");