2010-06-24 4 views
4

J'ai une situation où j'ai un formulaire avec plusieurs boutons de soumission et je veux mettre à jour un cadre distant. J'ai essayé d'utiliser un g:formremote avec 2 boutons g:actionsubmit (qui supportent javascript) mais les multiples boutons d'envoi ont un problème (décrit ici: http://www.grails.org/Ajax sous "Plusieurs boutons avec formRemote").grails forme à distance, plusieurs soumets, avec javascript

Je pris la solution de contournement, en utilisant 2 boutons g:submittoremote, qui fonctionnent de la façon dont je pense, mais ne l'accepte pas les paramètres javascript comme onClick (les boutons en question sont accepter/rejeter et je veux mettre un AYS sur le rejeter donc il n'est pas utilisé accidentellement).

Existe-t-il un moyen pour javascript et plusieurs boutons de soumission dans un formulaire distant pour exister pacifiquement?

Merci d'avance pour votre aide ...

Répondre

5

Avez-vous essayé le paramètre before? Il prend une fonction JavaScript, qui sera exécutée avant l'appel de fonction à distance. Il suffit de l'utiliser comme ceci:

<g:submitToRemote value="Reject" update="feedback" 
        controller="test" action="reject" 
        before="if (!confirm('sure?')) {return false;}" /> 

Quelle que soit JavaScript vous mettre dans le paramètre before sera inséré dans le droit attribut onclick avant votre appel Ajax Updater. De cette façon, vous pouvez facilement effectuer une validation, obtenir des confirmations, etc. et même passer de la gestion onclick avant de soumettre l'appel Ajax. Il existe un paramètre similaire after.

+0

Je jouais avec un tas de permutations de l'attribut avant, mais je n'ai pas essayé celui-ci. Cela devrait faire exactement ce que le PO veut. Bon appel! – proflux

+0

Simple, propre et fonctionne comme un charme! Merci beaucoup! – pennstatephil

+0

ETA: Une inspection plus poussée permet d'envoyer le formulaire, quel que soit le choix de l'utilisateur. J'ai trouvé une solution sur le blog d'un programmeur (http://fbflex.wordpress.com/2010/05/09/adding-javascript-validation-to-formremote-ajax-forms-in-grails/); l'essentiel est de fermer l'appel "if" dans un 'after', donc ce serait: Cela a fonctionné pour moi! – pennstatephil

3

D'accord, je ne dis pas cela est beau, mais je foiré autour avec cela pendant quelques minutes et avoir quelque chose qui pourrait fonctionner pour vous. Comme je l'ai dit ... pas la plus jolie solution, mais des solutions de contournement sont rarement ...

<html> 
<head> 
<g:javascript library="prototype" /> 
</head> 
<body> 
<script type="text/JavaScript"> 
function setReject() 
{ 
    document.getElementById('reject').value='true' 
} 
</script> 

<g:formRemote name="test" update="updater" url="[ controller: 'date', action: 'test']" > 
    <g:hiddenField name="reject" value="false" /> 
    <g:submitButton name="submit" value="something" onclick="setReject();return confirm('Are you sure???')" /> 
    <g:submitToRemote update="updater" action="otherTest" controller="date" value="Go Ahead"/> 
</g:formRemote> 


<div id="updater"> 

</div> 
</body> 
</html> 
Questions connexes