2010-12-09 15 views
0

J'ai créé un formulaire de contact dont le bouton de validation est désactivé jusqu'à ce que tous les champs aient été remplis et affichés. Le problème que j'ai est que le Submit reste désactivé sur IE, même lorsque tous les champs sont validés, de sorte que l'utilisateur est incapable d'envoyer le formulaire.Désactiver l'envoi d'une erreur de bouton dans Internet Explorer

J'ai essayé un certain nombre de façons d'ajouter un code différent pour le bouton d'envoi mais sans succès.

Mon code est le suivant:

JQuery

$(function() { 
$(":text").keypress(check_submit).each(function() { 
check_submit(); 
    }); 
}); 

function check_submit() { 
if ($(this).val().length == 0) { 
$(":submit").attr("disabled", true); 
} else { 
$(":submit").attr("disabled", false); 
    } 
} 

HTML

<form method="post" action="contactengine.php" id="commentForm"> 
     <label for="Name" id="Name">Name:</label> 
     <input type="text" name="Name" class="required"/><br /><br /> 



     <label for="Email" id="Email">Email:</label> 
     <input type="text" name="Email" class="required"/><br /><br /> 
     <label for="Location" id="Location">Location:</label> 
     <input type="text" name="Location" class="required"/><br /><br /> 


     <label for="Phone" id="Phone">Tel No:</label> 
     <input type="text" name="Phone" class="required"/><br /><br /> 

     <label for="Message" id="Message">Message:</label><br /> 
     <textarea name="Message" rows="20" cols="40" class="required"></textarea> 

     <input type="submit" name="submit" value="Submit" class="submit_btn" /> 
    </form> 

Répondre

2

this ne parle pas de ce que vous voulez, quand vous appelez la fonction de cette façon, elle devrait plutôt être:

$(function() { 
    $(":text").keypress(check_submit).each(check_submit); 
}); 

function check_submit() { 
    $(":submit").attr("disabled", $(this).val().length == 0); 
} 

... mais cette approche globale est erronée, car la validation sur tout rempli dans le domaine permettrait à la soumettre, au lieu que vous devez faire une boucle à travers et voir si tout sont vides, pas seulement le dernier en pressant une touche, comme ceci:

$(function() { 
    $(":text").bind("keyup change", check_submit).change(); 
}); 

function check_submit() { 
    var anyEmpty = false; 
    $(":text").each(function() { 
    if($(this).val().length==0) { anyEmpty = true; return false; } 
    }); 
    $(":submit").attr("disabled", anyEmpty); 
} 
+0

Le bouton Soumettre est toujours désactivé jusqu'à ce que je rafraîchisse la page et que cela fonctionne correctement. Une idée de pourquoi cela serait? – Micanio

+0

@Micanio - avez-vous des erreurs JavaScript? –

+0

Oui - l'erreur que j'obtiens est: L'objet ne supporte pas cette propriété ou cette méthode. – Micanio

0

essayer cette

function check_submit() { 
if ($(this).val().length == 0) { 
$(":submit").attr("disabled", true); 
} else { 
$(":submit").removeAttr("disabled"); 
    } 
} 
+0

cela ne semble pas fonctionner dans IE .... Je pense que – Micanio

+1

$ (« submit ») attr. ("désactivé", "désactivé"); est plus correct en raison de la syntaxe XHTML. De plus, vous avez cette ligne dans votre fonction: "if ($ (this) .val(). Length == 0)", mais $ (this) ne peut pas être utilisé correctement, donc l'identifiant de l'élément ou quelque chose de similaire pourrait être passé à la fonction. – Sk8erPeter

+0

Nick a remarqué que le branchement d'événement ne fonctionne pas comme prévu. Je ne l'ai pas fait. :) – Josh