2013-02-26 6 views
0

J'ai un template Html avec un formulaire à l'intérieur.Exécute la fonction Django juste quand javascript est dissous

<form id="my_form" method="post" action="/register/"> 
<input id="cemail" name="email" size="25" class="textbox required email" style="width: 250px"> <br><br> 
<input id="csubmit" type="submit" onclick="Clicked();" value="Send" /> 

J'ai aussi un code pour JQuery test si l'e-mail introduit est correct:

<script type="text/javascript" src="/js/jquery.validate.js"></script> 
<script> 
    function Clicked() { 
     $("#my_form").validate().form(); 
     value = $("#cemail").val(); 
     alert("ufffff"); 
     $.get("/exists/", {email: value}, function(data) { 
      $('#text')[0].innerHTML=data; 
     }); 
    } 
</script> 

Jusqu'à ici tout est ok. Mon problème apparaît quand j'exécute le programme. Toujours l'action = "/ register" est lancée, et je ne veux pas qu'elle se produise. Je voudrais que:

Si jquery est désactivée sur le navigateur client, exécutez l'action que le formulaire a. Si jquery est activé sur le navigateur client, exécutez simplement la fonction "Clicked()" et non l'action du formulaire ("/ register /" -> appelle la fonction django)

Est-ce que quelqu'un m'aide à faire ça? C'est possible?

+0

duplication possible de http://stackoverflow.com/questions/121203/how-to-detect-if-javascript-is-disabled –

+1

Vous pouvez simplement faire 'onclick =" Clicked(); return false; "' - - mais une meilleure approche serait de déplacer vos liaisons et les fonctions suivantes vers un JS externe. – ahren

+0

@ahren Je l'ai fait, mais l'action de formulaire est toujours en cours de lancement. Si je mets return false je ne veux pas que l'action du formulaire soit lancée – Raulsc

Répondre

0

Vous devez retourner false à partir de votre fonction Clicked.

Retour false à partir d'un gestionnaire d'événements en JavaScript indique au navigateur de ne pas exécuter l'action par défaut associée à cet élément (un lien ou un bouton).

Si vous voulez être super-correct, vous devez vous attacher à l'action submit de votre formulaire et retourner false là-bas. Cela permettra à un utilisateur de appuyez sur la touche de retour pour soumettre votre formulaire, mais arrêtez le navigateur de faire un POST:

$('#my_form').submit(function(){ 
    $("#my_form").validate().form(); 
    value = $("#cemail").val(); 
    alert("ufffff"); 
    $.get("/exists/", {email: value}, function(data) { 
     $('#text')[0].innerHTML=data; 
    }); 
    return false; 
}); 

Si JavaScript est désactivé, le navigateur exécutera l'action par défaut pour la forme normalement.

+0

Mon problème est que le bouton ne fait rien. Le formulaire est l'objet qui exécute l'action par défaut. Donc, il est possible de faire la même chose que vous avez dit (return false) mais en spécifiant le formulaire au lieu de l'élément qui a "lancé" la fonction Clicked? – Raulsc

+0

@Shedd cela fonctionne si je mets 'code'onclick =" Clicked(); return false; " – Raulsc

+0

Il fonctionne probablement sans ce retour faux; C'est juste en train de se produire pendant que le navigateur fait aussi le POST. Mais oui, ajouter false à votre onclick revient à retourner false à partir de la fonction Clicked. –

Questions connexes