级联形式
Cascade abide forms
我正在尝试使用遵守数据验证器,但收效甚微。我什至没有成功让它工作。我有一个主页,上面调用了所有必要的 javascript(包括基础和 foundation.abide),在这个页面上,在用户交互中,我调用了 "slidedown popup" 让用户能够登录或注册。
在 "popup" 中,html 看起来像这样:
<form id="login" data-abide>
<div class="large-10 large-centered small-11 small-centered columns">
<input placeholder="email" id="email" name="email" class="email" placeholder="large-10.columns" type="email" required />
<input type="password" placeholder="Mot de passe" id="mdp" name="mdp" placeholder="large-10.columns" required />
<div id="erreur"></div>
<!--<a href="#" class="mdp-oubli"><small>Mot de passe oublié?<small></a>-->
<button TYPE="submit" class="bt-login">Je me connecte</button>
</div>
</form>
我的 javascript 看起来像这样:
var utilisateur = {};
jQuery(document).ready(function($) {
$('.img_page').before($('h1'));
$("#bt2").click(function() {
$("#Modal2").reveal();
});
$("#bt8").click(function() {
$("#Modal3").reveal();
});
$(".voir-nav").click(function(){
if($(".nav-bar").css("display") == "none"){
$(".nav-bar").css("display", "block");
} else if($(".nav-bar").css("display") == "block"){
$(".nav-bar").css("display", "none");
}
});
$(document).foundation({
abide : {
validators: {
freeemail: function(el, required, parent){
email = el.val;
if (email == ''){
return 0;
} else {
var posting = $.post('check-email.html', email);
posting.done(function (data){
return data;
});
}
}
},
patterns: {
age: /^[1-9]{2}$/
}
}
});
$(".appel-rdv").click(function() {
$('#afficheFormRdv').load('form-login.html', function(response, status, xhr){
if (status=='success'){
if (response ==2) {
document.location.href = 'utilisateur.html';
} else {
$(document).foundation('abide', 'reflow');
$(".prise-rdv").slideDown();
$("#login")
.on('invalid.fndtn.abide', function () {
var invalid_fields = $(this).find('[data-invalid]');
console.log(invalid_fields);
})
.on('valid.fndtn.abide', function () {
utilisateur['email'] = $('#email').val();
utilisateur['mdp'] = $('#mdp').val();
var posting = $.post('login.html', utilisateur);
posting.done(function (data){
if (data==1){
$(".prise-rdv").slideUp();
document.location.href = 'utilisateur.html';
} else {
$('#erreur').html(data);
}
});
});
$("#inscription").on('invalid.fndtn.abide', function () {
var invalid_fields = $(this).find('[data-invalid]');
console.log(invalid_fields);
})
.on('valid.fndtn.abide', function () {
utilisateur['email'] = $('#email1').val();
utilisateur['mdp'] = $('#mdp1').val();
$('#afficheFormRdv').load('validation.html', function(response, status, xhr){
if (status == 'success'){
$(document).foundation('abide', 'reflow');
/*
* permet de choisir la ville en fonction du code postal
*/
$('#cp').change(function(){
if ($(this).val().length==5){
var posting = $.post( 'getvilles.html', {cp: $(this).val()} );
posting.done(function( data ) {
var $el = $("#ville");
$el.empty();
var truc = eval(data);
$.each(truc, function(i, value) {
$el.append($('<option>').text(value).attr('value', value));
});
$el.trigger('change');
});
}
});
$('#validation-insc').on('invalid.fndtn.abide', function () {
var invalid_fields = $(this).find('[data-invalid]');
console.log(invalid_fields);
})
.on('valid.fndtn.abide', function () {
$(form).find(":input").each(function(){
utilisateur[this.name] = $(this).val();
});
var posting = $.post( 'inscription.html', utilisateur );
posting.done(function( data ) {
if (data==1){
$(".prise-rdv").slideUp();
document.location.href = 'utilisateur.html';
} else {
var newArr = JSON.parse(data);
var alertString = 'Des erreurs sont survenues : \r\n';
for (var key in newArr) {
var obj = newArr[key];
alertString += obj+'\r\n';
}
alert(alertString);
}
});
}
);
}
});
});
}
} else if (status=='error') {
alert('Une erreur est survenue, merci de réessayer plus tard');
}
})
return false;
});
$(".rdv-fermer").click(function() {
$(".prise-rdv").slideUp();
return false;
});
/* ********************************************************************************************************************* */
/* ************************************************** Slider ********************************************************** */
var slider = new MasterSlider();
slider.setup('masterslider' , {
width:1900,
height:710,
heightLimit:710,
space:0,
view:"basic",
layout:'autofill',
speed : 20,
autoplay : true,
endPause : false,
overPause : true,
});
slider.control('arrows' ,{autohide:false, insertTo:'#masterslider'});
slider.control('timebar',{autohide:false, overVideo:true, align:'bottom', color:'#8b8b8b' , width:4 });
slider.control('bullets' , {autohide:false , dir:"h", align:"bottom", overVideo:false });
/* ------------------------------------------------------ FIN slider -------------------------------------------------- */
/* ********************************************************************************************************************* */
/* ************************************************** Landing ********************************************************** */
$("#presentation").imagesLoaded( function() {
$("#presentation li").each(function(){
var hauteurContenu = $(this).find('.content').outerHeight();
var hauteurConteneur = $(this).height();
var marginContenu = ((hauteurConteneur - hauteurContenu) / 2);
$(this).find('.cube').css('paddingTop', marginContenu);
});
var largeurPrix = $('#formRdv #prix').outerWidth();
var largeurFormRdv = $('#formRdv').width();
var marginPrix = ((largeurFormRdv - largeurPrix) / 2);
$('#formRdv #prix').css('marginLeft', marginPrix);
$(window).on('resize', function(){
$("#presentation li").each(function(){
var hauteurContenu = $(this).find('.content').outerHeight();
var hauteurConteneur = $(this).height();
var marginContenu = ((hauteurConteneur - hauteurContenu) / 2);
$(this).find('.cube').css('paddingTop', marginContenu);
});
});
});
$(".ouvrir .open").hide();
$(".ouvrir").click(function() {
if( $(this).find('.open').is(":hidden")) {
$(this).find('.open').fadeIn('300');
};
});
$(".ouvrir .bouton, .ouvrir .bt").click(function() {
if( $(".ouvrir").find('.open').not(":hidden")) {
$(".ouvrir").find('.open').fadeOut('300');
};
});
var tailleOpenHeure = $('#heure .open ul li').height() * ($('#heure .open ul li').length / 4) - 16;
$('#heure .open ul').height(tailleOpenHeure);
/* ------------------------------------------------------ FIN Landing -------------------------------------------------- */
/* ********************************************************************************************************************* */
/* ************************************************** Menu transparent ************************************************* */
var posNavprincipale = $("#nav-principale").css("top");
var btMenu = $(".nav_transparent .bt-menu");
$(".nav_transparent .bt-menu").click(function(event) {
if (posNavprincipale == '-80px') {
$(".nav_transparent").stop().animate({top: '-80'}, 300);
$(".nav_transparent").stop().fadeOut(800);
$("#nav-principale").stop().animate({top: '0'}, 300);
};
});
$(window).scroll(function (event) {
var scroll = $(window).scrollTop();
if (scroll < 350 && posNavprincipale == '-80px') {
$(".nav_transparent").stop().fadeIn(1000);
$("#nav-principale").stop().animate({top: '-80'}, 300);
}else{
$(".nav_transparent").stop().fadeOut(800);
$("#nav-principale").stop().animate({top: '0'}, 300);
};
});
/* ------------------------------------------------- FIN Menu transparent ----------------------------------------------- */
/* ********************************************************************************************************************* */
/* ************************************************** ui utilisateur ************************************************* */
var largeurAffichedate = $('.rdv_complement').width();
var hauteurAffichedate = $('.rdv_complement').height() + 36;
$("#affichedate").width(largeurAffichedate);
$("#affichedate").height(hauteurAffichedate);
var middleP = ((hauteurAffichedate - $("#affichedate p").height()) / 2) - 20;
$("#affichedate p").css('marginTop', middleP);
$(window).on('resize', function(){
var largeurAffichedate = $('.rdv_complement').width();
var hauteurAffichedate = $('.rdv_complement').height() + 36;
$("#affichedate").width(largeurAffichedate);
$("#affichedate").height(hauteurAffichedate);
})
/* ------------------------------------------------------ FIN ui utilisateur -------------------------------------------------- */
$('.fdatepicker').fdatepicker()
});
我还有另一个文件调用了特定于法语的验证器:
$(document).foundation({
abide : {
patterns: {
nom: /^[a-zéèàêâôùïüë](?:[- ']?[a-zéèàêâôùïüë]){2,59}$/i,
adresse: /^[a-zéèàêâôùïüë\- ']{2,100}$/i,
codepostal: /^[0-9]{5}$/,
telephone: /^0[1-9][0-9]{8}$/
}
}
});
有人可以帮助我吗?
1) 您的输入中有重复的占位符属性
2) 你必须尊重 adibe html 结构:每个 <input>
必须包裹在 <div>
3)如果要显示错误,应该在<input>
所在的同一块中插入.error
框,否则adibe无法将错误分配给其相对字段
这些是我发现的第一个错误:)
但我认为问题在于第 2 点)
基础验证器声明需要位于负载之后而不是外部:
$(".appel-rdv").click(function() {
$('#afficheFormRdv').load('form-login.html', function(response, status, xhr){
if (status=='success'){
if (response ==2) {
document.location.href = 'utilisateur.html';
} else {
$(document).foundation({
abide : {
....
我正在尝试使用遵守数据验证器,但收效甚微。我什至没有成功让它工作。我有一个主页,上面调用了所有必要的 javascript(包括基础和 foundation.abide),在这个页面上,在用户交互中,我调用了 "slidedown popup" 让用户能够登录或注册。
在 "popup" 中,html 看起来像这样:
<form id="login" data-abide>
<div class="large-10 large-centered small-11 small-centered columns">
<input placeholder="email" id="email" name="email" class="email" placeholder="large-10.columns" type="email" required />
<input type="password" placeholder="Mot de passe" id="mdp" name="mdp" placeholder="large-10.columns" required />
<div id="erreur"></div>
<!--<a href="#" class="mdp-oubli"><small>Mot de passe oublié?<small></a>-->
<button TYPE="submit" class="bt-login">Je me connecte</button>
</div>
</form>
我的 javascript 看起来像这样:
var utilisateur = {};
jQuery(document).ready(function($) {
$('.img_page').before($('h1'));
$("#bt2").click(function() {
$("#Modal2").reveal();
});
$("#bt8").click(function() {
$("#Modal3").reveal();
});
$(".voir-nav").click(function(){
if($(".nav-bar").css("display") == "none"){
$(".nav-bar").css("display", "block");
} else if($(".nav-bar").css("display") == "block"){
$(".nav-bar").css("display", "none");
}
});
$(document).foundation({
abide : {
validators: {
freeemail: function(el, required, parent){
email = el.val;
if (email == ''){
return 0;
} else {
var posting = $.post('check-email.html', email);
posting.done(function (data){
return data;
});
}
}
},
patterns: {
age: /^[1-9]{2}$/
}
}
});
$(".appel-rdv").click(function() {
$('#afficheFormRdv').load('form-login.html', function(response, status, xhr){
if (status=='success'){
if (response ==2) {
document.location.href = 'utilisateur.html';
} else {
$(document).foundation('abide', 'reflow');
$(".prise-rdv").slideDown();
$("#login")
.on('invalid.fndtn.abide', function () {
var invalid_fields = $(this).find('[data-invalid]');
console.log(invalid_fields);
})
.on('valid.fndtn.abide', function () {
utilisateur['email'] = $('#email').val();
utilisateur['mdp'] = $('#mdp').val();
var posting = $.post('login.html', utilisateur);
posting.done(function (data){
if (data==1){
$(".prise-rdv").slideUp();
document.location.href = 'utilisateur.html';
} else {
$('#erreur').html(data);
}
});
});
$("#inscription").on('invalid.fndtn.abide', function () {
var invalid_fields = $(this).find('[data-invalid]');
console.log(invalid_fields);
})
.on('valid.fndtn.abide', function () {
utilisateur['email'] = $('#email1').val();
utilisateur['mdp'] = $('#mdp1').val();
$('#afficheFormRdv').load('validation.html', function(response, status, xhr){
if (status == 'success'){
$(document).foundation('abide', 'reflow');
/*
* permet de choisir la ville en fonction du code postal
*/
$('#cp').change(function(){
if ($(this).val().length==5){
var posting = $.post( 'getvilles.html', {cp: $(this).val()} );
posting.done(function( data ) {
var $el = $("#ville");
$el.empty();
var truc = eval(data);
$.each(truc, function(i, value) {
$el.append($('<option>').text(value).attr('value', value));
});
$el.trigger('change');
});
}
});
$('#validation-insc').on('invalid.fndtn.abide', function () {
var invalid_fields = $(this).find('[data-invalid]');
console.log(invalid_fields);
})
.on('valid.fndtn.abide', function () {
$(form).find(":input").each(function(){
utilisateur[this.name] = $(this).val();
});
var posting = $.post( 'inscription.html', utilisateur );
posting.done(function( data ) {
if (data==1){
$(".prise-rdv").slideUp();
document.location.href = 'utilisateur.html';
} else {
var newArr = JSON.parse(data);
var alertString = 'Des erreurs sont survenues : \r\n';
for (var key in newArr) {
var obj = newArr[key];
alertString += obj+'\r\n';
}
alert(alertString);
}
});
}
);
}
});
});
}
} else if (status=='error') {
alert('Une erreur est survenue, merci de réessayer plus tard');
}
})
return false;
});
$(".rdv-fermer").click(function() {
$(".prise-rdv").slideUp();
return false;
});
/* ********************************************************************************************************************* */
/* ************************************************** Slider ********************************************************** */
var slider = new MasterSlider();
slider.setup('masterslider' , {
width:1900,
height:710,
heightLimit:710,
space:0,
view:"basic",
layout:'autofill',
speed : 20,
autoplay : true,
endPause : false,
overPause : true,
});
slider.control('arrows' ,{autohide:false, insertTo:'#masterslider'});
slider.control('timebar',{autohide:false, overVideo:true, align:'bottom', color:'#8b8b8b' , width:4 });
slider.control('bullets' , {autohide:false , dir:"h", align:"bottom", overVideo:false });
/* ------------------------------------------------------ FIN slider -------------------------------------------------- */
/* ********************************************************************************************************************* */
/* ************************************************** Landing ********************************************************** */
$("#presentation").imagesLoaded( function() {
$("#presentation li").each(function(){
var hauteurContenu = $(this).find('.content').outerHeight();
var hauteurConteneur = $(this).height();
var marginContenu = ((hauteurConteneur - hauteurContenu) / 2);
$(this).find('.cube').css('paddingTop', marginContenu);
});
var largeurPrix = $('#formRdv #prix').outerWidth();
var largeurFormRdv = $('#formRdv').width();
var marginPrix = ((largeurFormRdv - largeurPrix) / 2);
$('#formRdv #prix').css('marginLeft', marginPrix);
$(window).on('resize', function(){
$("#presentation li").each(function(){
var hauteurContenu = $(this).find('.content').outerHeight();
var hauteurConteneur = $(this).height();
var marginContenu = ((hauteurConteneur - hauteurContenu) / 2);
$(this).find('.cube').css('paddingTop', marginContenu);
});
});
});
$(".ouvrir .open").hide();
$(".ouvrir").click(function() {
if( $(this).find('.open').is(":hidden")) {
$(this).find('.open').fadeIn('300');
};
});
$(".ouvrir .bouton, .ouvrir .bt").click(function() {
if( $(".ouvrir").find('.open').not(":hidden")) {
$(".ouvrir").find('.open').fadeOut('300');
};
});
var tailleOpenHeure = $('#heure .open ul li').height() * ($('#heure .open ul li').length / 4) - 16;
$('#heure .open ul').height(tailleOpenHeure);
/* ------------------------------------------------------ FIN Landing -------------------------------------------------- */
/* ********************************************************************************************************************* */
/* ************************************************** Menu transparent ************************************************* */
var posNavprincipale = $("#nav-principale").css("top");
var btMenu = $(".nav_transparent .bt-menu");
$(".nav_transparent .bt-menu").click(function(event) {
if (posNavprincipale == '-80px') {
$(".nav_transparent").stop().animate({top: '-80'}, 300);
$(".nav_transparent").stop().fadeOut(800);
$("#nav-principale").stop().animate({top: '0'}, 300);
};
});
$(window).scroll(function (event) {
var scroll = $(window).scrollTop();
if (scroll < 350 && posNavprincipale == '-80px') {
$(".nav_transparent").stop().fadeIn(1000);
$("#nav-principale").stop().animate({top: '-80'}, 300);
}else{
$(".nav_transparent").stop().fadeOut(800);
$("#nav-principale").stop().animate({top: '0'}, 300);
};
});
/* ------------------------------------------------- FIN Menu transparent ----------------------------------------------- */
/* ********************************************************************************************************************* */
/* ************************************************** ui utilisateur ************************************************* */
var largeurAffichedate = $('.rdv_complement').width();
var hauteurAffichedate = $('.rdv_complement').height() + 36;
$("#affichedate").width(largeurAffichedate);
$("#affichedate").height(hauteurAffichedate);
var middleP = ((hauteurAffichedate - $("#affichedate p").height()) / 2) - 20;
$("#affichedate p").css('marginTop', middleP);
$(window).on('resize', function(){
var largeurAffichedate = $('.rdv_complement').width();
var hauteurAffichedate = $('.rdv_complement').height() + 36;
$("#affichedate").width(largeurAffichedate);
$("#affichedate").height(hauteurAffichedate);
})
/* ------------------------------------------------------ FIN ui utilisateur -------------------------------------------------- */
$('.fdatepicker').fdatepicker()
});
我还有另一个文件调用了特定于法语的验证器:
$(document).foundation({
abide : {
patterns: {
nom: /^[a-zéèàêâôùïüë](?:[- ']?[a-zéèàêâôùïüë]){2,59}$/i,
adresse: /^[a-zéèàêâôùïüë\- ']{2,100}$/i,
codepostal: /^[0-9]{5}$/,
telephone: /^0[1-9][0-9]{8}$/
}
}
});
有人可以帮助我吗?
1) 您的输入中有重复的占位符属性
2) 你必须尊重 adibe html 结构:每个 <input>
必须包裹在 <div>
3)如果要显示错误,应该在<input>
所在的同一块中插入.error
框,否则adibe无法将错误分配给其相对字段
这些是我发现的第一个错误:) 但我认为问题在于第 2 点)
基础验证器声明需要位于负载之后而不是外部:
$(".appel-rdv").click(function() {
$('#afficheFormRdv').load('form-login.html', function(response, status, xhr){
if (status=='success'){
if (response ==2) {
document.location.href = 'utilisateur.html';
} else {
$(document).foundation({
abide : {
....