这是小提琴:
https://jsfiddle.net/2uyp1g25/
map
$(document).ready(function(){
var formBasico = $("#basico").show();
formBasico.validate({
ignore: ":disabled,:hidden",
rules: {
'nombre-temp': {
required: true,
range: [1, 50]
},
'descripcion-temp': {
required: true,
range: [1, 50]
},
'min-cli': {
required: true,
number: true
},
'max-cli': {
required: true,
number: true
},
'cantidad-celdas': {
required: true,
number: true
}
}
});
$('#pasosTemplate').steps({
headerTag: "h3",
bodyTag: "section",
transitionEffect: "slideLeft",
autoFocus: true,
labels: {
cancel: "Cancelar",
current: "paso actual:",
pagination: "Paginación",
finish: "Guardar Template",
next: "Siguiente",
previous: "Anterior",
loading: "Cargando ..."
},
onStepChanging: function (event, currentIndex, newIndex) {
if (currentIndex < newIndex) {
alert(formBasico.valid());
return formBasico.valid();
}
return true;
},
onFinished: function (event, currentIndex) {
alert('fin');
}
});
});
/*
Common
*/
.wizard,
.tabcontrol
{
display: block;
width: 100%;
overflow: hidden;
}
.wizard a,
.tabcontrol a
{
outline: 0;
}
.wizard ul,
.tabcontrol ul
{
list-style: none !important;
padding: 0;
margin: 0;
}
.wizard ul > li,
.tabcontrol ul > li
{
display: block;
padding: 0;
}
/* Accessibility */
.wizard > .steps .current-info,
.tabcontrol > .steps .current-info
{
position: absolute;
left: -999em;
}
.wizard > .content > .title,
.tabcontrol > .content > .title
{
position: absolute;
left: -999em;
}
/*
Wizard
*/
.wizard > .steps
{
position: relative;
display: block;
width: 100%;
}
.wizard.vertical > .steps
{
display: inline;
float: left;
width: 30%;
}
.wizard > .steps .number
{
font-size: 1.429em;
}
.wizard > .steps > ul > li
{
width: 25%;
}
.wizard > .steps > ul > li,
.wizard > .actions > ul > li
{
float: left;
}
.wizard.vertical > .steps > ul > li
{
float: none;
width: 100%;
}
.wizard > .steps a,
.wizard > .steps a:hover,
.wizard > .steps a:active
{
display: block;
width: auto;
margin: 0 0.5em 0.5em;
padding: 1em 1em;
text-decoration: none;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
.wizard > .steps .disabled a,
.wizard > .steps .disabled a:hover,
.wizard > .steps .disabled a:active
{
background: #eee;
color: #aaa;
cursor: default;
}
.wizard > .steps .current a,
.wizard > .steps .current a:hover,
.wizard > .steps .current a:active
{
background: #007cc1;
color: #fff;
cursor: default;
}
.wizard > .steps .done a,
.wizard > .steps .done a:hover,
.wizard > .steps .done a:active
{
background: #9dc8e2;
color: #fff;
}
.wizard > .steps .error a,
.wizard > .steps .error a:hover,
.wizard > .steps .error a:active
{
background: #ff3111;
color: #fff;
}
.wizard > .content
{
background: #eee;
display: block;
margin: 0.5em;
min-height: 35em;
overflow: hidden;
position: relative;
width: auto;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
.wizard.vertical > .content
{
display: inline;
float: left;
margin: 0 2.5% 0.5em 2.5%;
width: 65%;
}
.wizard > .content > .body
{
float: left;
position: relative;
width: 95%;
height: 95%;
padding: 2.5%;
}
.wizard > .content > .body ul
{
list-style: disc !important;
}
.wizard > .content > .body ul > li
{
display: list-item;
}
.wizard > .content > .body > iframe
{
border: 0 none;
width: 100%;
height: 100%;
}
.wizard > .content > .body input
{
display: block;
border: 1px solid #ccc;
}
.wizard > .content > .body input[type="checkbox"]
{
display: inline-block;
}
.wizard > .content > .body input.error
{
background: rgb(251, 227, 228);
border: 1px solid #fbc2c4;
color: #8a1f11;
}
.wizard > .content > .body label
{
display: inline-block;
margin-bottom: 0.5em;
}
.wizard > .content > .body label.error
{
color: #8a1f11;
display: inline-block;
margin-left: 1.5em;
}
.wizard > .actions
{
position: relative;
display: block;
text-align: right;
width: 100%;
}
.wizard.vertical > .actions
{
display: inline;
float: right;
margin: 0 2.5%;
width: 95%;
}
.wizard > .actions > ul
{
display: inline-block;
text-align: right;
}
.wizard > .actions > ul > li
{
margin: 0 0.5em;
}
.wizard.vertical > .actions > ul > li
{
margin: 0 0 0 1em;
}
.wizard > .actions a,
.wizard > .actions a:hover,
.wizard > .actions a:active
{
background: #007CC1;
color: #fff;
display: block;
padding: 0.5em 1em;
text-decoration: none;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
.wizard > .actions .disabled a,
.wizard > .actions .disabled a:hover,
.wizard > .actions .disabled a:active
{
background: #eee;
color: #aaa;
}
.wizard > .loading
{
}
.wizard > .loading .spinner
{
}
/*
Tabcontrol
*/
.tabcontrol > .steps
{
position: relative;
display: block;
width: 100%;
}
.tabcontrol > .steps > ul
{
position: relative;
margin: 6px 0 0 0;
top: 1px;
z-index: 1;
}
.tabcontrol > .steps > ul > li
{
float: left;
margin: 5px 2px 0 0;
padding: 1px;
-webkit-border-top-left-radius: 5px;
-webkit-border-top-right-radius: 5px;
-moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
.tabcontrol > .steps > ul > li:hover
{
background: #edecec;
border: 1px solid #bbb;
padding: 0;
}
.tabcontrol > .steps > ul > li.current
{
background: #fff;
border: 1px solid #bbb;
border-bottom: 0 none;
padding: 0 0 1px 0;
margin-top: 0;
}
.tabcontrol > .steps > ul > li > a
{
color: #5f5f5f;
display: inline-block;
border: 0 none;
margin: 0;
padding: 10px 30px;
text-decoration: none;
}
.tabcontrol > .steps > ul > li > a:hover
{
text-decoration: none;
}
.tabcontrol > .steps > ul > li.current > a
{
padding: 15px 30px 10px 30px;
}
.tabcontrol > .content
{
position: relative;
display: inline-block;
width: 100%;
height: 35em;
overflow: hidden;
border-top: 1px solid #bbb;
padding-top: 20px;
}
.tabcontrol > .content > .body
{
float: left;
position: absolute;
width: 95%;
height: 95%;
padding: 2.5%;
}
.tabcontrol > .content > .body ul
{
list-style: disc !important;
}
.tabcontrol > .content > .body ul > li
{
display: list-item;
}
如何修复此错误???
答案 0 :(得分:3)
您已将formBasico
变量名称分配给包含.show()
方法的内容。
var formBasico = $("#basico").show();
然后您将其附加到.valid()
方法...
alert(formBasico.valid());
您只能将.valid()
方法附加到表单对象或表单的数据输入元素。但是,在您的情况下,formBasico
变量既不代表。
通过仅将.valid()
附加到表示表单对象的内容来修复它...
$("#basico").valid()
查看你的jsFiddle,我可以通过将.valid()
移到.steps()
之外来测试.valid()
方法。
https://jsfiddle.net/2uyp1g25/1/
出于某种原因,.steps()
在.steps()
方法中调用时停止工作。我正在考虑true
它正在返回.valid()
,因为在插入onStepChanging
之前,Steps插件隐藏了面板。一旦隐藏,表单就会有效,因为你忽略了隐藏的字段。
The documentation for Steps说false
:
在步骤更改之前触发,可以通过返回
return false
来防止步骤更改。对表单验证非常有用。
虽然您的演示证明情况并非如此。
如果我在onStepChanging
内return false
,我可以停止这一步;但是我无法在.valid()
之前或之后运行任何其他代码。
如果我按照您的方式尝试,则步骤会在.valid()
运行之前发生变化,然后onFinishing
为真,因为该步骤已隐藏。
我认为这是步骤中的错误。
当我尝试false
,which states ...
在完成之前触发,可以通过返回
return false
来阻止完成。对表单验证非常有用。
我只是将return false
放在这里,它甚至不能像上面的文档中所描述的那样工作!如果rules
甚至没有停止该步骤,那么您将无法在其中运行任何其他代码。
https://jsfiddle.net/2uyp1g25/2/
为什么有两个完全不同的选项,都被描述为“对表单验证非常有用”哪一个正常工作就足够了?
有presently 109 open issues个步骤插件和issues within onStepChanging
,其中许多人描述了表单验证问题。自2014年9月以来,此插件似乎也未被更新或维护。
修改强>:
经过更多实验,我发现可以通过将验证规则内联为类名而不是onStepChanging
对象内部来“修复”...
https://jsfiddle.net/2uyp1g25/3/
无论你如何声明规则,jQuery Validate都是一样的,所以唯一不同的是它的时间。这只能确认Steps插件在其git remote add origin https://github.com/ni8mr/Local-Weather-App/tree/gh-pages
回调的工作原理方面存在一些严重问题。