Yii Framework Forum: [Gelöst] AjaxSubmitButton + FormValidation - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[Gelöst] AjaxSubmitButton + FormValidation Rate Topic: -----

#1 User is offline   MeiSign 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 17
  • Joined: 24-April 12

Posted 01 June 2012 - 09:46 AM

Das Thema scheint ja sehr leidvoll zu sein und ich habe es auch schon öfters im Forum gelesen aber keine wirkliche Lösung gefunden.
Ich bin jetzt so weit, dass die success Methode vom Controller einen JSON String in Form von:
{"NodeFormModel_name":["Name darf nicht leer sein."],
"NodeFormModel_type":["Type darf nicht leer sein."],
"NodeFormModel_wheelchair":["Wheelchair darf nicht leer sein."],
"NodeFormModel_lon":["Lon darf nicht leer sein."],
"NodeFormModel_lat":["Lat darf nicht leer sein."]} 

zurückbekommt. Meine Frage ist nun, wie bekomme ich die Fehlermeldungen am einfachsten in die dafür vorgesehenen Errorboxen des Formulars?? Bin ein echter JQuery noob und wäre für jede Hilfestellung dankbar.
Gibt es vielleicht eine fertige Methode dafür oder brauche ich eine Schleife die über das Array iteriert?

Edit: ClientValidation ist auch aktiviert in dem Formular, vielleicht könnte man die Fehler auch anzeigen indem man irgendwie vortäuscht das betroffene Formular verlassen zu haben mit dem Cursor?
Check out my ChartJS Extension to get some nice Charts as Widgets easily in your application. https://github.com/MeiSign/yii-chartjs
0

#2 User is offline   Haensel 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 444
  • Joined: 14-January 11
  • Location:Vienna (Austria)

Posted 01 June 2012 - 11:28 AM

Hi,

Ich versteh deine Frage leider nicht ganz: Verwendest du CActiveForm oder ein selbstgebasteltes Standardformular? Weil CActiveForm kümmert sich eigentlich um alle Fehlermeldungen/Validierungen etc. und den JS code der dafür nötig ist. mit einer Syntax a la

$form->error($model,'deinFeldName');


wird zB standardmäßig ein Feld gerendert welches etwaige Fehler des Attributs "deinFeldName" anzeigt. Wenn du ajaxValidation bzw. clientValidation einsetzt müsste das ohne großartige Hacks funktionieren.

Serverseitig kann man zB ajax requests so validieren:

protected function performAjaxValidation($model)
{
    if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }
}

0

#3 User is offline   MeiSign 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 17
  • Joined: 24-April 12

Posted 01 June 2012 - 11:32 AM

Ich habe genau solch ein Formular, das Problem ist, das validateOnSubmit nicht triggert wenn man einen AjaxSubmitButton benutzt. Ich render das Formular nach absenden nicht neu sozusagen. Deshalb muss ich die Fehlermeldungen manuell anzeigen.
Check out my ChartJS Extension to get some nice Charts as Widgets easily in your application. https://github.com/MeiSign/yii-chartjs
0

#4 User is offline   Haensel 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 444
  • Joined: 14-January 11
  • Location:Vienna (Austria)

Posted 01 June 2012 - 12:00 PM

Ah ok, jetzt check ich was du meinst. Mir war gar nicht bewusst, dass es das Problem gibt. Ein Vorschlag den ich diesbezüglich gelesen habe war einen "afterValidate" callback zu definieren welcher die Form abschickt weils ja anscheinend mit dem ajaxSubmitButton selbst nicht klappt. Siehe http://www.yiiframew...tOptions-detail bzw. hier der Forum Post der den afterValidate Hack erwähnt: http://www.yiiframew...jax#entry138728

Eventuell hilft das ja mal weiter
1

#5 User is offline   MeiSign 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 17
  • Joined: 24-April 12

Posted 01 June 2012 - 04:03 PM

Danke für den Tipp, hier ist die Lösung die ich daraus gemacht habe:

Formular:
<?php 
   $form=$this->beginWidget('CActiveForm', array(
			                         'id' => 'node-form',
						 'action' => Yii::app()->request->baseUrl.'/index.php/GameClient/default/playEdit',
   					         'enableClientValidation'=>true,
						 'clientOptions'=>array(
						                        'validateOnSubmit'=>true,
						      		        'afterValidate'=>'js:aftVali'
	                                                                ),)); 
?>
...
...
...
<?php echo CHtml::submitButton('Save', array('id' => 'submitbutton'))?>


JS Function:
function aftVali(form, data, hasError) { 
	if(!hasError) {
		$.ajax({
			  type: 'POST',
			  url: form.attr('action'),
			  data: form.serialize(),
			});
	}
	return false; 
}

Check out my ChartJS Extension to get some nice Charts as Widgets easily in your application. https://github.com/MeiSign/yii-chartjs
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users