2011-04-04 6 views
0

Dans cette fonction, en fonction de la valeur d'une entrée, le formulaire submit est true/false. Pourquoi ne pas retourner vrai travailler dans cette fonction?formulaire submit

Fondamentalement, ma phrase if teste un point d'interrogation dans le formulaire. Si quelqu'un est là, je ne veux pas que le formulaire soit soumis à search.php. Si un point d'interrogation n'est pas là, la phrase else, alors je veux que le formulaire soit soumis à search.php. J'ai essayé d'utiliser return true; faire .form1 soumettre, mais cela n'a pas fonctionné. Puis j'ai essayé $ ('. Form1'). Submit(), mais cela l'a fait soumettre avant d'appuyer sur enter.

   <script> 

      $(".askInput").keyup(function() { 

       if ($(this).val().indexOf("?") != -1) { 

        $(this).css({"color" : "#00bfff", 'border-top-right-radius' : '0px', 'border-bottom-right-radius' : '0px', '-moz-border-top-right-radius' : '0px', '-moz-border-bottom-right-radius' : '0px', '-webkit-border-top-right-radius' : '0px', '-webkit-border-bottom-right-radius' : '0px'}); 

        $('.searchEnter').stop().animate({ 
        marginLeft: "310px" 
        }, 200); 
        $('.form1').submit(function() { 
         return false; 
         }); 


       } else { 

        $(this).css({"color" : "#333", 'border-top-right-radius' : '5px', 'border-bottom-right-radius' : '5px', '-moz-border-top-right-radius' : '5px', '-moz-border-bottom-right-radius' : '5px', '-webkit-border-top-right-radius' : '5px', '-webkit-border-bottom-right-radius' : '5px'}); 

        $('.searchEnter').stop().animate({ 
         marginLeft: "250px" 
         }, 200); 
        $('.form1').submit(function() { 
         return true; 
         }); 

       } 
      }); 

      </script> 
+1

Quel est le résultat attendu et comment "ça ne marche pas"? – deceze

+0

Le résultat attendu est, sur autre, le formulaire .form1 doit soumettre. Donc ça ne marche pas. Au lieu de cela, il continue à ne pas soumettre. Il est fondamentalement comme tout dans l'instruction else fonctionne à l'exception de ceci: $ ('. Form1'). Submit (function() { return true; }); – hubrid

+0

duplication possible du formulaire [\ [jquery \] formulaire submit] (http://stackoverflow.com/questions/5535035/jquery-form-submit) – Blender

Répondre

1

Au lieu de changer constamment le gestionnaire de soumission du formulaire, pourquoi ne pas rechercher le point d'interrogation lors de la soumission?

$('.form1').submit(function() { 
    if ($('.askInput').val().indexOf("?") != -1) return false; 
}); 

$(".askInput").keyup(function() { 

    if ($(this).val().indexOf("?") != -1) { 

    $(this).css({ 
     "color": "#00bfff", 
     'border-top-right-radius': '0px', 
     'border-bottom-right-radius': '0px', 
     '-moz-border-top-right-radius': '0px', 
     '-moz-border-bottom-right-radius': '0px', 
     '-webkit-border-top-right-radius': '0px', 
     '-webkit-border-bottom-right-radius': '0px' 
    }); 

    $('.searchEnter').stop().animate({ 
     marginLeft: "310px" 
    }, 200); 
    } else { 

    $(this).css({ 
     "color": "#333", 
     'border-top-right-radius': '5px', 
     'border-bottom-right-radius': '5px', 
     '-moz-border-top-right-radius': '5px', 
     '-moz-border-bottom-right-radius': '5px', 
     '-webkit-border-top-right-radius': '5px', 
     '-webkit-border-bottom-right-radius': '5px' 
    }); 

    $('.searchEnter').stop().animate({ 
     marginLeft: "250px" 
    }, 200); 
    } 
}); 
+0

Ahhh, je préférerais que ce soit constamment. – hubrid

+0

Pourquoi, pourrais-je demander? – Blender

+0

Ohhhh je vois. Peu importe, cela pourrait fonctionner. – hubrid

0
$('.form1').submit(function() { 
    return true; 
}); 

Cette fonction se fixe qui retourne juste true à l'événement submit. C'est à dire. après cela, lorsque vous soumettez le formulaire, la fonction renverra true. Et c'est tout.

Voici le manual entry:

.submit(handler(eventObject))
handler(eventObject) Une fonction pour exécuter chaque fois que l'événement est déclenché.


Si vous voulez juste de soumettre le formulaire, utilisez $('.form1').submit(). Si vous ne voulez pas soumettre le formulaire, n'appelez pas .submit(). I.e. .:

if (...) { 
    ... 
    // don't call submit 
} else { 
    ... 
    $('.form1').submit(); 
} 
+0

Ok alors attendez, je veux la fonction de ne pas soumettre sur le "si", et de soumettre sur le "else". Donc, si la fonction ne soumet pas sur le if (ce que je veux qu'il fasse), comment puis-je le soumettre à la place sur else. – hubrid

+0

@hubrid Just ** ne ** soumet pas le formulaire dans la condition "if", ** n'appelle pas ** .submit() '. L'appel '.submit()' soumet le formulaire, ne l'appelant pas ne sera pas. N'appelez '.submit()' dans la condition "' else' "que si vous voulez soumettre le formulaire. – deceze

+0

$ ('.form1'). Submit(); Cela le fait soumettre avant même que l'utilisateur clique sur entrer. – hubrid

0

utilisation submit sans aucun paramètre: $('.form').submit()

+0

Cela le fait soumettre avant même que l'utilisateur clique sur Entrée. Je dois le soumettre lorsque l'utilisateur appuie sur Entrée. – hubrid

0

Je pense que vous voulez éviter la soumission du formulaire lorsque l'entrée askInput est invalide. Lorsque vous liez un gestionnaire de soumission au formulaire, il est toujours attaché. Ainsi, chaque fois que votre gestionnaire keyUp est exécuté, vous ajoutez un gestionnaire de soumission supplémentaire au formulaire. L'un d'entre eux est lié à "return false", empêchant le formulaire de se soumettre. Au lieu de cela, peut-être désactiver le bouton d'envoi ou ajouter une classe "invalide" au formulaire et ajouter un seul gestionnaire de soumission de formulaire qui s'assure que le formulaire n'a pas la classe invalide.

.: par exemple

<form> 
    <input name="ask" /> <input type="submit" /> 
</form> 
<script> 
$('form').submit(function(e) { 
    if ($(this).hasClass('invalid')) { 
    e.preventDefault(); 
    } 
}); 
$('input[name="ask"]').keyup(function(e) { 
    if ($(this).val().indexOf("?") != -1) { 
    // ... 

    $(this.form).addClass('invalid'); 
    // or 
    $(':submit', this.form).attr('disabled', 'disabled'); 
    } else { 
    // ... 

    $(this.form).removeClass('invalid'); 
    // or 
    $(':submit', this.form).removeAttr('disabled'); 
    } 
}); 
</script> 

Vous pouvez également utiliser une bibliothèque de validation bataille testé jQuery comme jQuery ketchup.

+0

Y at-il de toute façon que je peux le faire en changeant le formulaire afin qu'il soumette/actualise la page et ne soumet pas/n'actualise pas la page? – hubrid

+0

C'est ce que fait l'exemple de code ci-dessus. Voulez-vous soumettre quand "?" est saisi? Si oui, utilisez simplement: '$ ('input [name =" ask "]'). Keyup (fonction (e) {if ($ (ce) .val(). IndexOf ("? ")! = -1) {$ (this.form) .submit();}}); ' – sj26

+0

Oui, la chose est, avec $ (this.form) .submit() ;, le formulaire est soumis avant que l'utilisateur appuie sur Entrée. Il soumet en temps réel ... si cela a du sens. – hubrid

0

Essayez.

$('.form1').submit(function (e) { 
    if ($('.askInput').val().indexOf("?") != -1) { 
    e.preventDefault(); 
    } 
    $(this).submit(); 
}); 
+0

Si j'utilise cela, il se soumet à l'autre (ce qui est bien), mais il commence aussi à soumettre sur le si (ce qui n'est pas bon). – hubrid

0

Qu'est-ce que Blender a essayé de vous dire (au milieu de tout ce que la magie jQuery, si vous aimez ce genre de chose) est d'ajouter un écouteur pour l'événement présenter de la forme qui ressemble à l'entrée et retourne false s'il y a un ? Là.En termes simples, POJS:

<form onsubmit="return validateInput(this);"> 
    <input name="foo" value="?"> 
    <input type="submit"> 
</form> 

<script type="text/javascript"> 
    function validateInput(form) { 

    if (/\?/.test(form.foo.value)) { 
     // value has a ?, ask user to fix it 
     alert('Get rid of ? knucklehead!!'); 

     // cancel submit 
     return false; 
    } 
    } 
</script>