我本机开发了一个小型向导脚本,与普通向导不同。
一点它是如何工作的
我的向导避免丢失表单中输入的数据并保留用户所在的步骤,即使重新加载页面或用户错误单击另一个链接或关闭选项卡时,数据和步骤也会保留,与这可以防止用户不得不从头开始重复这些步骤(除非用户关闭浏览器)。
问题是如果用户留下空的表单字段,用户可以继续/前进到下一步,这不应该发生。如果未正确填写表单字段,我需要在每个步骤中验证表单字段以防止它继续执行下一步。
这个想法是创建验证,例如以下向导或其他向导,如果单击继续下一步,将input
表单字段留空,这会在每个空字段的下方或侧面引发错误input
,从而避免继续下一步。
在示例中,您可以看到其验证正在根据当前步骤中的容器进行验证,然后再继续下一步。
我的向导的 HTML 结构可以说是一样的,每一步都有它的容器,它的 ID 是唯一的step1, step2, step3 etc...
<?php include 'php/wizard.php' ?>
<!-- dato importante para el funcionamiento wizard -->
<script type="text/javascript">
var step = <?php echo $step ?>;
var radio = <?php echo $radio ?>;
</script>
<form id="form">
<div id="step1" class="step">
<h1>Paso 1</h1>
<!-- Diferentes tipos de campo input u otros que se necesitan validar-->
<a href="#" onclick="show_step('2')">continuar</a>
</div>
<div id="step2" class="step">
<h1>Paso 2</h1>
<!-- Diferentes tipos de campo input u otros que se necesitan validar-->
<a href="#" onclick="show_step('1')">Atras</a>
<a href="#" onclick="show_step('3')">continuar</a>
</div>
<div id="step3" class="step">
<h1>Paso 3</h1>
<!-- Diferentes tipos de campo input u otros que se necesitan validar-->
<a href="#" onclick="show_step('2')">Atras</a>
<a href="#" onclick="show_step('4')">continuar</a>
</div>
<div id="step4" class="step">
<h1>Paso 4</h1>
<!-- Diferentes tipos de campo input u otros que se necesitan validar-->
<a href="#" onclick="show_step('3')">Atras</a>
<input><-- Finalizar
</div>
</form>
我的向导
注意:表单验证必须仅使用 jQuery/PHP 本地验证,而不使用库或插件。
function show_step(step){
var data = $( "#form" ).serialize();
var url = 'saveTemp.php?step=' + step;
// recuperamos el lavel del radio button seleccionado
//var valor_radio = $('input:radio[name=radio]:checked').next("label").text();
$.ajax({
type: "POST",
url: url,
data: data
}).done(function(resp){
step = parseInt(step);
$('#address').val(resp.address);
$('#email').val(resp.email);
$('#name').val(resp.name);
$('#phone').val(resp.phone);
$('#radio').val(resp.radio);
$('#username').val(resp.username);
if (step === 2) {
var radio = parseInt(resp.radio);
switch(radio) {
case 1:
urlform = './app/themes/pay_paypal.php'
break;
case 2:
urlform = './app/themes/pay_paypal2.php'
break;
case 3:
urlform = './app/themes/pay_paypal3.php'
break;
default:
urlform = './app/themes/pay_paypal4.php'
break;
}
$('#divPago').load(urlform,function(responseTxt, statusTxt, xhr){
if(statusTxt === "success") {
$('.step').css( "display", "none" );
$('#step'+ step).fadeIn("slow");
animacion(step);
}
if(statusTxt === "error") {
//
}
});
} else {
$('.step').css( "display", "none" );
$('#step'+ step).fadeIn("slow");
animacion(step);
}
});
};
$(function() {
show_step(step);
});
基于这个问题:
Una solución a tu problema es buscar y validar solo aquellos campos dentro del paso actual, antes de continuar al siguiente.
Si solo te interesa validar:
radio
ocheckbox
, al menos uno este seleccionadoinput
(distinto deradio
ochecbox
),select
otextarea
, no estén vacíosEntonces podrías hacer algo simple como esto:
Ejemplo:
这在很大程度上取决于您要执行的验证,例如,如果您想验证所有输入都不是空的,只需使用 Jquery,您可以执行以下操作:
您可以根据要检查的输入自定义选择器“$()”,例如:
在复选框的情况下,“if()”必须按以下方式完成:
要在循环之前完全停止函数,您可以放置一个要检查的变量,它看起来像这样:
Mi alternativa de solución es la siguiente. la validación se aplica por tipos ,
input textarea , select
, (esto puede variar) solo se valida que no esté vacíos y que esté un elemento seleccionado de unselect
. Para la validación utilizo unarray
para ir añadiendo los errores y los elementos donde se producieron.Aparte de la validación con JQuery , se podría ir mostrando los mensajes por ejemplo cuando el input no es válido , esto se podría lograr añadiendo el atributo
pattern
alinput
con la validación que se requiera por ejemplopattern="[0-9]{6,11}"
para que ingrese mínimo 6 y máximo 11. , El código está comentado这是一个如何逐步制作表单并逐步验证字段的示例,其中包含对以下类型字段的验证:
text
可选择最小和最大字符,范围可以用data-min
和设置data-max
。tel
根据正则表达式 (/^(?:(?:\+|00)?34)?[6-9]\d{8}$/
) 验证电话。textarea
可选择最小和最大字符,范围可以用data-min
和设置data-max
。select
并且select multiple
,要求至少选择一个选项。radio
要求至少选择一个选项。checkbox
要求选择此项。需要验证的字段必须具有属性
required
。您可以自定义每个字段的错误消息,方法
span
是wizard-message
在label
.ENTER
如果我们不在最后一步,默认情况下会使用密钥阻止发送。类
.next
和用于.back
向前或向后移动。最后一步必须设置,为此我们可以使用
data-end
标签上的属性form
或直接设置属性endStep
要定义表单步骤,我们使用带有类
wizard
和 id的 div 标签,wizard-N
其中N表示步骤编号。书柜被用来
Bootstrap
赋予一点风格。剩下的就是 js 和 JQuery。我已经对代码进行了注释以使其易于理解。
正如我在评论中指出的那样,脚本很容易适应您的代码。我在这里留下一个带有您代码的示例。