Ich habe eine Dropdown-Liste, in der verschiedene Felder angezeigt werden, je nachdem, was ausgewählt wurde, und ich weiß, dass ich die Sichtbarkeit mit Status googeln kann. Wenn ich jedoch versuche, "Erforderlich" zu verwenden, wird "* span" angezeigt, dies ist jedoch nicht erforderlich. Was ich damit meine ist, dass ich, obwohl es "erforderlich" ist, auf "Senden" klicken und keine Fehlermeldung von Drupal erhalten kann. Mache ich etwas falsch oder ist das derzeit in Drupal 7.8 kaputt?
$form['host_info'] = array(
'#type' => 'select',
'#title' => t("Host Connection"),
'#options' => array(
'SSH2' => t('SSH2'),
'Web Service' => t('Web Service'),
),
'#default_value' => t(variable_get('host_info', 'SSH2')),
'#description' => t("Specify the connection information to the host"),
'#required' => TRUE,
);
$form['ssh_host'] = array(
'#type' => 'textfield',
'#title' => t("Host Address"),
'#description' => t("Host address of the SSH2 server"),
'#default_value' => t(variable_get('ssh_host')),
'#states' => array(
'visible' => array(
':input[name=host_info]' => array('value' => t('SSH2')),
),
'required' => array(
':input[name=host_info]' => array('value' => t('SSH2')),
),
),
);
$form['ssh_port'] = array(
'#type' => 'textfield',
'#title' => t("Port"),
'#description' => t("Port number of the SSH2 server"),
'#default_value' => t(variable_get('ssh_port')),
'#states' => array(
'visible' => array(
':input[name=host_info]' => array('value' => t('SSH2')),
),
'required' => array(
':input[name=host_info]' => array('value' => t('Web Service')),
),
),
);
7
javascript
Sathariel
quelle
quelle
name
. Es muss sein:input[name="host_info"]
.Antworten:
Sie müssen dies selbst in einer benutzerdefinierten Validierungsfunktion validieren.
Alles, was von #states konfiguriert wurde, geschieht zu 100% im Browser. Alles, was es tut, ist für Drupal nicht sichtbar, wenn das Formular gesendet wird.
quelle
Sie können erforderlich wie folgt verwenden:
quelle
Ganz ähnlich wie die Antwort von Felix Eve ist dies nur ein Ausschnitt für die Inline-Elementvalidierung:
Sie nennen eine Elementvalidierungsfunktion das gewünschte Element:
Dann findet die Validierungsfunktion das erforderliche Feld und prüft, ob es den korrekten Formularwert hat, der das Feld enthüllt, das benötigt wird.
quelle
Es gibt eine andere Möglichkeit, die AFTER_BUILD-Funktion für das Formular zu verwenden und dieses Feld optional zu machen. Hier ist ein Link für Drupal 6.
Fügen Sie dies Ihrem Formularcode hinzu
Testen Sie nach der Implementierung Ihre benutzerdefinierte Feldbedingung
In meinem Fall hat #states mehrere * hinzugefügt, daher muss ich dies vermeiden und habe jquery verwendet, um den Bereich, der * enthält, auszublenden und anzuzeigen.
Und
Basierend auf meinem custom_field-Wert.
quelle
Hier ist eine detaillierte Anleitung zu Drupal 7 von #states .
Das ist das Wichtige:
quelle
Ich war gerade mit demselben Problem konfrontiert, das für die Bereitstellung einer benutzerdefinierten Validierung erforderlich war. Ich wollte jedoch, dass dies über das Array #states gesteuert wird, damit ich nicht zweimal dieselben Regeln angeben musste.
Es funktioniert durch Extrahieren des Feldnamens aus dem jQuery-Selektor (der Selektor muss im Format vorliegen, sonst
:input[name="field_name"]
funktioniert es nicht).Der folgende Code wird nur in dem speziellen Szenario getestet, in dem ich ihn verwendet habe, obwohl er sich für andere als nützlich erweisen könnte.
quelle
Ich konnte es in Drupal 8 so machen:
Setzen Sie nicht t ('SSH2'). Dadurch wird die Übersetzung dorthin verschoben, anstatt des Werts der Option, bei der es sich um eine nicht übersetzte SSH2 handelt.
Ich vermute, dass dies auch für Drupal 7 funktionieren würde.
quelle
Ich habe Formularfelder und ein Kontrollkästchen verschachtelt, also musste ich ein wenig an Dominic Woodmans Antwort arbeiten. Für den Fall, dass eine andere Stelle auf dasselbe Problem stößt:
quelle