Was ist der richtige Selektor für Radios, um festzustellen, ob ein Radio ausgewählt ist?

7

Wenn Sie #states verwenden, um die Sichtbarkeit von Formularelementen zu ändern, möchte ich, dass ein zweites Element nur sichtbar ist, wenn das erste Element ausgefüllt ist. Das erste Element besteht aus zwei Optionsfeldern. Daher habe ich Folgendes versucht:

  '#states' => array('visible' => array(
  ':input[name="radio-id"]' => array('value' => '0', 'value' => '1'),
    ),),

Dies funktioniert jedoch nicht, die Bedingung für den 2. Wert blockiert die erste, sodass das andere Element nur angezeigt wird, wenn das 2. Radio ('1') aktiviert ist. Also habe ich versucht:

    :input[name="radio-id"]' => array('checked' => TRUE),

Nein, das funktioniert auch nicht.

Was ist die richtige Syntax dafür und auf welcher Dokumentationsseite befindet sie sich? (drupal.org oder eine andere Seite?) Ich habe gesucht und gesucht, kann es aber nicht finden.

Compustretch
quelle

Antworten:

8

Hatte heute das gleiche Problem. Eine geringfügige Änderung des in diesem Kommentar vorgeschlagenen Ausdrucks für negierte Werte : "Empty Radio Selection" auf der API-Seite drupal_process_states () hat den Trick für mich getan!

'#states' => array(
   'visible' => array(
     ':input[name="radios-name"]' => array('!value' => false),
   ),
 ),

Ich wollte nur, dass die Auswahlliste mit dem obigen Eintrag #states unsichtbar ist, während in meiner Liste mit fünf Funkgeräten (Freigabename "Funkenname") noch keine Auswahl getroffen wurde.

Radios waren in meinem Fall auch '#required' => true und alle 5 einzelnen Optionsfelder haben nicht numerische Zeichenfolgenwerte. Auch in meinem Fall ist kein #default_value angegeben.

Haftungsausschluss: Ich habe dies nur auf Chrome getestet!

apistos88
quelle
Großartig, danke. Funktioniert übrigens auch unter Firefox.
Marcvangend
Danke - funktioniert gut. Beachten Sie in dem Beispiel, auf das Sie verlinken, dass sie den unsichtbaren Status verwenden und nicht den sichtbaren , den Sie verwenden. Ich muss auch unsichtbar verwenden , damit es funktioniert.
Felix Eve
2

Sie sollten sich das Statusbeispiel im Formularbeispiel im Beispielprojekt ansehen . Diese genaue Situation wird auf verschiedene Arten demonstriert.

rfay
quelle
Bitte versuchen Sie hier einen Code-Ausschnitt zu posten. Wir möchten, dass unsere Benutzer so lange wie möglich hier sind.
Niksmac
2

Die Dokumentation für die Eigenschaft #states befindet sich in der Dokumentation für drupal_process_states(), die den folgenden Satz und Beispielcode enthält.

Beim Verweisen auf Auswahllisten und Optionsfelder in Remote-Bedingungen muss eine 'Wert'-Bedingung verwendet werden:

  '#states' => array(
    // Show the settings if 'bar' has been selected for 'foo'.
    'visible' => array(
      ':input[name="foo"]' => array('value' => 'bar'),
    ),
  ),

Der Code, den Sie in Ihrem zweiten Snippet verwenden, funktioniert für Kontrollkästchen, wie im folgenden Beispiel.

$form['toggle_me'] = array(
  '#type' => 'checkbox',
  '#title' => t('Tick this box to type'),
);

$form['settings'] = array(
  '#type' => 'textfield',
  '#states' => array(
    // Only show this field when the 'toggle_me' checkbox is enabled.
    'visible' => array(
      ':input[name="toggle_me"]' => array('checked' => TRUE),
    ),
  ),
);
kiamlaluno
quelle