it-swarm.com.de

Der Abbrechen-Button im benutzerdefinierten default.php-Layout führt zu einem Fehler bei der Formularüberprüfung

Ich habe ein Problem mit meiner Abbrechen-Schaltfläche in meiner default.php, die ein Formular mit einigen Eingabefeldern sowie einer Speichern- und Abbrechen-Schaltfläche ist. In meinem Formular sind einige Pflichtfelder vorhanden. Wenn ich auf die Schaltfläche Abbrechen klicke, wird die Formularüberprüfung aktiviert und ich werde aufgefordert, diese Felder auszufüllen.

Könnte es ein Ergebnis der Verwendung des Layouts default.php sein?

5022015 - UPDATE
Das Formular ist ein Frontend-Formular und die Abbrechen-Schaltfläche wurde über die benutzerdefinierte JToolBar von Joomla erstellt

6022015 - Reduzierten Layoutcode hinzufügen

<?php
defined('_JEXEC') or die;
JHtml::_('behavior.formvalidation');
JHtml::_('behavior.keepalive');
JHtml::_('formbehavior.chosen', 'select');
?>

<script type="text/javascript">
        Joomla.submitbutton = function(task)
    {
                if (task == 'contact.cancel' || document.formvalidator.isValid(document.getElementById('contact-form')))
        {
                        alert (task);
                        Joomla.submitform(task, document.getElementById('contact-form'));
        } else {
                if (task != 'contact.cancel' && document.formvalidator.isValid(document.id('contact-form'))) {
                        Joomla.submitform(task, document.getElementById('contact-form'));
                } else {
                    alert('<?php echo $this->escape(JText::_('JGLOBAL_VALIDATION_FORM_FAILED')); ?>');
                }
            }
    }               
</script>

<form action="<?php echo JRoute::_('index.php?option=com_ecms&view=contact&id=' . (int) $this->form->getInput('id')); ?>" method="post" name="contactForm" id="contact-form" class="form-validate" enctype="multipart/form-data">
    <div class="row-fluid">
        <fieldset class="form-horizontal">
                        <div class="control-group">
                            <div class="control-label"> 
                                <?php echo $this->form->getLabel('id'); ?>
                            </div>
                            <div class="controls">
                <?php echo $this->form->getInput('id'); ?>
                            </div>
            </div>
                        <div class="control-group">
                            <div class="control-label"> 
                                <?php echo $this->form->getLabel('surname'); ?>
                            </div>
                            <div class="controls">
                <?php echo $this->form->getInput('surname'); ?>
                            </div>
            </div>
                </fieldset>
                <div id="toolbar-cancel" class="btn-wrapper">
                    <button class="btn btn-small" onclick="Joomla.submitbutton('contact.cancel')">
                        <span class="icon-cancel"></span><?php echo JText::_('JCANCEL') ?>
                    </button>
                </div>            
        </div>
    <?php echo JHtml::_('form.token'); ?>
</form>
1
Perino

Es scheint, dass dies ein Problem der benutzerdefinierten JToolBar von Joomlas ist, mit der hier eine Symbolleiste für das Front-End erstellt wird.

siehe letzter Absatz: https://docs.joomla.org/Client-side_form_validation

Das Problem ist, dass die Umgehung dieses Artikels nicht funktioniert!

Inzwischen habe ich das Problem gefunden. Wenn Sie sich den Schaltflächencode genauer ansehen, der in der HTML-Ausgabe der Site erstellt wird, werden Sie feststellen, dass der Typ der Schaltfläche nicht festgelegt ist. In diesem Fall sollte es 'type = "button"' sein. Ist dies nicht gesetzt, wird in jedem Fall die Formularvalidierung ausgelöst.

Eine normale Tastenintegration, wie es Dmitry vorschlägt, führt zum Erfolg. Joomlas JToolbar für benutzerdefinierte Symbolleisten benötigt eine Korrektur.

2
Perino

Eine andere Lösung besteht darin, JToolBar überhaupt nicht zu verwenden. Brauchen Sie es wirklich? Stellen Sie einfach Ihren Button so ein (zB "Abbrechen" -Button):

<button type="button" class="btn" onclick="Joomla.submitbutton('contact.cancel')">
    <span class="icon-cancel"></span>&#160;<?php echo JText::_('JCANCEL') ?>
</button>

Dann in JS:

Joomla.submitbutton = function(task) 
{
    if (task == 'contact.cancel')
    {
        Joomla.submitform(task);
    }
}

Und du bist gut zu gehen.

2
Dmitry Rekun

Dies ist nicht auf das von Ihnen verwendete Layout zurückzuführen, sondern auf eine Einschränkung der Schaltfläche "Abbrechen", mit der die Formularüberprüfung von selbst übersprungen wird.

In der Regel müssen Sie Folgendes implementieren:

JFactory::getDocument()->addScriptDeclaration('
    Joomla.submitbutton = function(task)
    {
        if (task == "article.cancel" || document.formvalidator.isValid(document.getElementById("item-form")))
        {
            ' . $this->form->getField('articletext')->save() . '
            Joomla.submitform(task, document.getElementById("item-form"));
        }
    };
');

Dies wurde aus dem Joomla-Hauptartikel edit.php Layout ( https://github.com/joomla/joomla-cms/blob/bd3d9cc947458437f790180fad4b817ee36e41d3/administrator/components/com_content/views/article/tmpl/ edit.php Zeile 64)

Die Grundidee ist, den Submit-Handler zu überschreiben, um zu prüfen, ob es sich um eine Abbrechen-Schaltfläche handelt (mit task = VIEWNAME.cancel OR zum Validieren des Dokuments. Dies sollte den Validator überspringen, wenn Sie abbrechen und verarbeiten die Taste, wie Sie es erwarten würden.

Sie müssen wahrscheinlich ein paar Dinge tun, damit dies in Ihrem Fall funktioniert:

  1. Entfernen Sie ' . $this->form->getField('articletext')->save() . '. Das ist spezifisch für diese Ansicht.
  2. Aktualisieren Sie article.cancel Auf VIEWNAME.cancel.
  3. Aktualisieren Sie das document.getElementById(...), um die ID für Ihr Formular zu sein.
1
David Fritsch