Submit multiplo con validazione in ajax e lato client

Ciao a tutti,

sto sviluppando il mio primo progetto con Yii, e sono quasi al completamento (spero di potervi far avere presto il link, così mi dite che ne pensate), ma oggi ho un piccolo problema che non riesco a risolvere:

nella pagina di registrazione dell’utente ho abilitato sia la validazione lato client che ajax, funziona tutto ma non riesco ad evitare il doppio click sul pulsante submit.

Inizialmente avevo pensato di disattivalo onlick, ma se poi c’è un errore di validazione, il pulsante dovrebbe essere riattivato.

C’è forse qualcosa messa a disposizione dal framework per gestire queste situazioni? O devo diventare matto con jquery e ajax? :-/

Grazie a tutti

Simone

Matto no, all’onclick io disabiliterei il bottone, che riabiliterei qualche secondo dopo che la pagina di autenticazione ha fatto il suo dovere. Oppure, … disabiliti la chiamata ajax per qualche secondo (per la stessa ragione). Così anche se uno clicca come un forsettato su quel bottone NON fa mille chiamate ajax.

aggiugni alla chiamata ajax i seguenti eventi:


beforeSend: function(){

     $('#idbutton').attr('disabled','disabled');

   },

   complete: function(){

     $('#idbutton').removeAttr('disabled');

   }



la soluzione di markux mi sembra valida, questa sera quando sarò a casa proverò.

Grazie mille ad entrambi :slight_smile:

Simone

non ho avuto molto succeesso, questo è quello che ho prodotto:




<?php $form=$this->beginWidget('CActiveForm', array(

            'id'=>'register-form',

            'enableClientValidation'=>true,

            'clientOptions'=>array(

                'validateOnSubmit'=>true,

		'beforeValidate'=>'js:function(form){$("#fsubmit").attr("disabled","disabled");return true;}',

		'afterValidate'=>'js:function(form, data, hasError){

		    if(hasError){

			$("#fsubmit").removeAttr("disabled"); 

			return false;

		    } 

		    return true; 

		}',

            ),

        )); ?>



chiaramente fsubmit è l’id del bottone che dovrebbe essere cliccato una sola volta.

ma non funziona come dovrebbe…

quelle non sono chiamate ajax.

puoi anche provare a mettere nella in fondo alla pagina questo codice javascript:


$('#fsubmit').ajaxStart(function() {$(this).attr("disabled","disabled");}).ajaxStop(function() {$(this)..removeAttr("disabled");});

funziona, grazie mille :wink:

ignoravo l’esistenza di ajaxStart e ajaxStop!