2010-03-09 5 views
2

Il s'agit d'une validation de formulaire qui masquera le bouton d'envoi si les champs d'entrée ne sont pas valides, et l'affichera si tous les champs d'entrée sont valides. Pourquoi le bouton submit est-il invisible dans firefox après que toutes les entrées ont été rendues de nouveau valides, quand cela ne se produit pas dans d'autres navigateurs?jquery validation de formulaire> FIREFOX PROBLEM

Ceci est le javascript en question:

$(document).ready(function(){ 
$("input[type='text'],input[type='password']").focus(function(){ 
    $(this).siblings('.hideit').removeClass('hideit').parent('div').addClass('phover').siblings('div').removeClass('phover').children('p,strong:not(.invalid,.valid,.hidev)').addClass('hideit'); 
}); 
$("input[type='text'],input[type='password']").blur(function(){ 
    $(this).siblings('p,strong:not(.invalid,.valid,.hidev)').addClass('hideit').parent('div').removeClass('phover'); 
}); 
$("input[type='text'],input[type='password']").change(function(){ 
    var theval = $(this).val(); 
    var theexp = $(this).attr("reg"); 
    var ivalid = new RegExp(theexp); 
    if (theval.search(ivalid) == -1) { 
     $(this).siblings('strong.hidev,strong.valid').removeClass('hidev valid').addClass('invalid').text("x"); 
     showsubmit($(this)); 
     } else { 
      $(this).siblings('strong.hidev,strong.invalid').removeClass('hidev invalid').addClass('valid').text("="); 
      showsubmit($(this)); 
    } 

}); 
function showsubmit(x){ 
    $("input[type='text'],input[type='password']").each(function(){ 
      var getval = $(this).val(); 
      var getreg = $(this).attr("reg"); 
      var itest = new RegExp(getreg); 
      if (getval.search(itest) == -1) { 
       $("p.sub").fadeOut(1000); 
       return false; 
      } else { 
      $("p.sub").fadeIn(1000); 
      return true; 
      } 
    }); 
} 

}); 

<div id="formb"> 
    <form name="tform1" id="form1"> 
     <div ><label for="names">NAMES:</label><strong class="prepend-2 hideit">Your names (Last, First and/or middle).</strong><br /><input type="text" name="name" id="names" reg="^([a-zA-Z]{2,},)((\s[a-zA-Z]{2,})|(\s[a-zA-Z]{2,}){2})$" /><strong class="hidev"></strong><p class="prepend-2 hideit hintf">example: BILL, GATES JOHN</p></div> 
     <div><label for="usern">USERNAME:</label><strong class="prepend-4 hideit">Choose a username.</strong><br /><input type="text" name="user" id="usern" reg="^[a-zA-Z]{6,}$" /><strong class="hidev"></strong><p class="prepend-1 hideit hintf">min 6, without special character or numbers</p></div> 

     <div><label for="userp">PASSWORD:</label><strong class="prepend-4 span-3 hideit">Choose a password.</strong><br /><input type="password" name="pass" id="userp" reg="^(?=.*[0-9]+.*)(?=.*[a-zA-Z]+.*)(?=.*[#@!&]+.*)[0-9a-zA-Z#@!&]{6,}$" /><strong class="hidev"></strong><p class="hintf hideit">min. 6, must contain alphabet(s), number(s) & xter(#, @, &, !)</p></div> 
     <div><label for="email">E-MAIL ADDRESS:</label><strong class="prepend-2 hideit">Input your email address.</strong><br /><input type="text" name="mail" id="email" reg="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})$" /><strong class="hidev"></strong><p class="prepend-2 hideit hintf">E-mail address must be valid for usage.</p></div> 

      <p class="sub"> 
       <input type="submit" value="Submit" /> 

      </p> 

    </form> 
</div> 
+12

Bubblegum coincé dans votre clé "verrouillage des majuscules"? – Pointy

+0

Le verrouillage des majuscules est à l'extrême gauche, juste sous la touche de tabulation. –

+0

S'il vous plaît ne pas écrire en majuscules: c'est l'équivalent de crier et ne fera que certaines personnes "couvrir leurs oreilles" ... – siukurnin

Répondre

4

Je pense que la réponse réside peut-être dans le fait que vous montrer et cacher le bouton soumettre que vous évaluez chaque entrée. Au lieu de cela, j'ai caché le bouton de soumission tout de suite et changé "showsubmit" pour ressembler à ceci.

function showsubmit(x){ 
var hideIt = 0; 
$("input[type='text'],input[type='password']").each(function(){ 
    var getval = $(this).val(); 
    var getreg = $(this).attr("reg"); 
    var itest = new RegExp(getreg); 
    hideIt |= (getval.search(itest) == -1); 
}); 
if (hideIt) { 
    if ($("p.sub").is(":visible")) { 
     $("p.sub").fadeOut(1000); 
    } 
    return false; 
} else { 
    $("p.sub").fadeIn(1000); 
    return true; 
} 
} 

L'échantillon est disponible sur JS Bin http://jsbin.com/eyexa4/3/edit

+0

merci boo! testé et fonctionne bien ... – Joberror

+0

salut jedatu! J'ai testé cela sur le site de JS BIN et cela fonctionne parfaitement mais n'a pas fonctionné localement, ce qui pourrait être faux. même j'ai copié le code JS BIN HTML généré dans mes fichiers locaux toujours le même sur firefox .. – Joberror

+0

La version de jQuery sur l'exemple JS Bin est-elle la même que dans votre projet? – jedatu