it-swarm.com.de

Kann ich Ajax verwenden, um mehrere Formularelemente von einer Eingabe aus anzusprechen?

Ich versuche, mit Ajax zwei verschiedene Teile eines drupal Formulars aus nur einer Formulareingabeunschärfe zu aktualisieren).

Ich habe das Standard-Ajax-Zeug auf meiner Eingabe:

$my_form['my_input']['#ajax'] = array(
  'callback' => 'my_callback',
  'wrapper' => 'my_target_div',
  'event' => 'blur',
);

Dies funktioniert gut und tauscht mein div aus, wenn die Eingabe aktualisiert wird ... jedoch Ich möchte auch eine andere Formulareingabe an anderer Stelle im Formular mit anderem Code aktualisieren, da meine ursprüngliche Eingabe unscharf ist .

Ist das möglich, irgendwelche Ideen?

Bearbeiten: Zur Verdeutlichung hier mein Beispiel aus der realen Welt:

  • Inhaltstyp 'Film'
  • Feld 'primary_title' hinzugefügt
  • Wenn 'primary_title' aktualisiert wird, sucht mein Ajax-Rückruf nach ähnlichen Zeichenfolgen und gibt HTML zurück.
  • Das HTML aus dem Rückruf wird in ein leeres div eingefügt.

    Dieser Teil funktioniert großartig!

Ich versuche auch, die Eingabe des Standardknotens 'title' zu ändern und ihm den Wert 'primary_title' zu geben, nachdem ich einen regulären Ausdruck zum Aufräumen der Zeichenfolge vorgenommen habe (Entfernen von "The" oder "A" vom Anfang usw.). Das Ergebnis Es handelt sich um zwei Titelfelder, eines mit dem vollständigen Titel 'primary_title' und eines mit dem Titel 'title', die zum Sortieren und Anzeigen von Datensätzen nützlich sind.

8
Rick

Es scheint, dass Sie mit Ajax-Befehlen auf verschiedene Teile eines Formulars abzielen können. Sie müssen jedoch wählen, ob Sie nur einen von einem der folgenden Werte zurückgeben möchten:

  • HTML oder

  • Ein renderbares Array oder

  • Ein Array von AJAX Befehlen)

In der Situation, über die ich ursprünglich geschrieben habe, habe ich versucht, ein Array von AJAX Befehlen und einem renderbaren Array zurückzugeben, was nicht möglich erscheint.

Der Code im Beispielmodul demonstriert das Targeting verschiedener Teile eines Formulars mithilfe eines Arrays von AJAX - Befehlen:

function ajax_example_advanced_commands_html_callback($form, $form_state) {
  $text = $form_state['values']['html_command_example'];

  $commands = array();
  $commands[] = ajax_command_html('#html_div', $text);
  $commands[] = ajax_command_replace("#html_status", "<div id='html_status'>Updated html_command_example with text=$text;  " . date('r') . "</div>");
  return array('#type' => 'ajax', '#commands' => $commands);
}

In diesem Codebeispiel erhält #html_div $ text und #html_status separat "Aktualisiertes html_command_example mit text = $ text;". Datum ('r'). ""

Zwei verschiedene Stellen auf einem Formular mit zwei verschiedenen Informationen aus dem einen Ajax-Rückruf!

Als ich mir noch einmal ansah, woran ich arbeitete, wurde mir klar, dass ich das Knotentitelfeld überhaupt nicht zurückgeben musste. Es wird nur ein Dienstprogrammfeld sein, das zum Sortieren von Daten in Listen verwendet wird.

Ich habe das Feld im Knotenformular ausgeblendet und es wird beim zweiten Erstellen meines Formulars ausgefüllt, wenn mein ursprünglicher Ajax-Rückruf ausgelöst wird.

13
Rick

Eine weitere Option von drupal.org :

Sie können das gesamte Formular problemlos ersetzen, wenn dies am einfachsten ist. Fügen Sie einfach ein #prefix und #suffix zum gesamten Formulararray hinzu und legen Sie dieses als #ajax ['wrapper'] fest. (Auf diese Weise können Sie mehrere Formularelemente über einen einzigen Ajax-Aufruf ändern.) Der einzige Grund, dies nicht zu tun, besteht darin, dass der Vorgang schneller ist, wenn weniger Informationen übertragen werden.

Ihre Rückruffunktion kann so einfach sein wie:

function _callback($form, $form_state) {
  return $form;
}

Dies sollte von einem #ajax - Array in einem Formularelement (field_whatever Für das folgende Beispiel) aufgerufen werden, das in einem hook_form_FORM_ID_alter() (oder einer Art Formularänderungs-Hook) definiert ist, in dem Sie sich befinden Testen Sie auch auf $form_state und nehmen Sie Änderungen am Array $form vor, z.

 if (isset($form_state['values']['field_whatever'])){
     $form['field_something']['#disabled'] = TRUE;
     $form['field_something_else']['#disabled'] = FALSE;
 } else {
     $form['field_something']['#disabled'] = FALSE;
     $form['field_something_else']['#disabled'] = TRUE;
 }
0
cdmo

Ich bin ziemlich neu in Drupal, aber bisher fand ich das Ajax-Framework ziemlich unflexibel. Es funktioniert großartig, solange Sie es so verwenden, wie es beabsichtigt war. Also in Ihrem Fall, wenn Sie etwas JS kennen Das Beste wäre definitiv, dieses Skript selbst zu machen, es sollte sehr leicht sein.

Viel Glück!

0
silkAdmin