Auf meiner Testseite http://development.schachbund.de/pre...netschach.html bekomme ich nach dem Abschicken des Formulars trotz ausgewählter Option im SELECT-Feld eine Fehlermeldung "Ungültige Auswahl". Das SELECT-Feld wird mit jQuery und Chosen und UI/Autocomplete und Ajax betrieben. Beispiel: mind. 2 Buchstaben eingeben, Name auswählen, restliche Felder füllen und abschicken.
Im POST-Request ist das SELECT-Feld "name" ausgefüllt. Trotzdem kommt "ungültige Auswahl".
PHP-Code für das Formular:
PHP-Code:
protected function compile()
{
// Der 1. Parameter ist die Formular-ID (hier "linkform")
// Der 2. Parameter ist GET oder POST
// Der 3. Parameter ist eine Funktion, die entscheidet wann das Formular gesendet wird (Third is a callable that decides when your form is submitted)
// Der optionale 4. Parameter legt fest, ob das ausgegebene Formular auf Tabellen basiert (true)
// oder nicht (false) (You can pass an optional fourth parameter (true by default) to turn the form into a table based one)
$objForm = new \Haste\Form\Form('internetschachform', 'POST', function($objHaste)
{
return \Input::post('FORM_SUBMIT') === $objHaste->getFormId();
});
// URL für action festlegen. Standard ist die Seite auf der das Formular eingebunden ist.
// $objForm->setFormActionFromUri();
$elemente = array
(
'1' => 'eins',
'2' => 'zwei',
'3' => 'drei',
'4' => 'vier',
);
$objForm->addFormField('pid', array(
'inputType' => 'hidden',
'default' => $this->internetschach
));
$objForm->addFormField('name', array(
'label' => 'Spieler suchen und wählen',
'inputType' => 'select',
//'selected' => array('1'),
//'options' => array_keys($elemente),
//'reference' => $elemente,
'eval' => array('mandatory'=>true, 'class'=>'form-control select-box')
));
$objForm->addFormField('email', array(
'label' => 'E-Mail',
'inputType' => 'text',
'eval' => array('mandatory'=>true, 'rgxp'=>'email', 'class'=>'form-control')
));
$objForm->addFormField('chessbase', array(
'label' => 'ChessBase-Benutzername',
'inputType' => 'text',
'eval' => array('mandatory'=>true, 'class'=>'form-control')
));
$objForm->addFormField('description', array(
'label' => 'Bemerkungen',
'inputType' => 'textarea',
'eval' => array('mandatory'=>false, 'rte'=>'tinyMCE', 'class'=>'form-control')
));
// Submit-Button hinzufügen
$objForm->addFormField('submit', array(
'label' => 'Anmeldung abschicken',
'inputType' => 'submit',
'eval' => array('class'=>'btn btn-primary')
));
$objForm->addCaptchaFormField('captcha');
// Ausgeblendete Felder FORM_SUBMIT und REQUEST_TOKEN automatisch hinzufügen.
// Nicht verwenden wenn generate() anschließend verwendet, da diese Felder dort standardmäßig bereitgestellt werden.
$objForm->addContaoHiddenFields();
// validate() prüft auch, ob das Formular gesendet wurde
if($objForm->validate())
{
// Alle gesendeten und analysierten Daten holen (funktioniert nur mit POST)
$arrData = $objForm->fetchAll();
self::saveAnmeldung($arrData); // Daten sichern
// Seite neu laden
\Controller::addToUrl('send=1'); // Hat keine Auswirkung, verhindert aber das das Formular erneut ausgefüllt ist
\Controller::reload();
}
// Javascript ergänzen
$javascript ='
<script type="text/javascript">
$("select.select-box").chosen();
$(\'.chosen-search input\').autocomplete({
delay: 500,
minLength: 2,
autoFocus: false,
position: { my : "right top", at: "right bottom" },
source: function(request, response) {
$.ajax({
url: "bundles/contaointernetschach/Spielerliste.php?pid='.$this->internetschach.'&q="+request.term,
dataType: "json",
success: function(data) {
$(\'select.select-box\').empty();
response($.map(data, function(item) {
$(\'select.select-box\').append(\'<option value="\'+item.id+\'">\' + item.name + \'</option>\');
}));
$("select.select-box").trigger("chosen:updated");
//$(".chosen-search input").val(request.term);
}
});
}
});
</script>
';
// Template ausgeben
$this->Template = new \FrontendTemplate($this->strTemplate);
$this->Template->class = "ce_internetschach";
$this->Template->content = $objForm->generate().$javascript;
return;
}
Was muß ich insbesondere bei
PHP-Code:
$objForm->addFormField('name', array(
'label' => 'Spieler suchen und wählen',
'inputType' => 'select',
//'selected' => array('1'),
//'options' => array_keys($elemente),
//'reference' => $elemente,
'eval' => array('mandatory'=>true, 'class'=>'form-control select-box')
));
ändern, damit die Fehlermeldung nicht mehr kommt? Mit mandatory = false klappte es auch nicht.
EDIT: Ich habe eine Vermutung. Übergebe ich die Optionen bereits in der Funktion addFormField ist alles in Ordnung. Die nachträglich mit JS reingeworfenen Optionen werden immer mit "Ungültige Auswahl!" quittiert. Wahrscheinlich aus Schutz vor Hackern. Ich muß also eine Möglichkeit finden, die Validierung für das Element abzuschalten.
Lesezeichen