Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

[gelöst] Kann man in einem Formular über #ajax auch mehrere Elemente triggern?

Eingetragen von bit-checker (28)
am 23.02.2015 - 07:26 Uhr in
  • Modul-Entwicklung
  • Drupal 7.x

Hallo,
ich mabe ein SELECT- Element und möchte mehr als ein anderes Element bei Änderungen in diesem Feld bearbeiten und ändern. Geht das?

function ajax_example_simplest($form, &$form_state) {

//This is my ajax trigger element
$form['element_trigger'] = array(
'#type' => 'select',
'#options' => array(
'one' => 'one',
'two' => 'two',
'three' => 'three',
),
'#ajax' => array(
'callback' => 'ajax_example_simplest_callback',

/** Q: Can I somehow declare more than one wrapper? **/
//Say for instance, something like:
'wrapper' => array('replace_div_1', 'replace_div_2'),

),
);

//replace_div_1
$form['element_to_be_replaced_1'] = array(
'#type' => 'textfield',
'#title' => t("My conditional field one"),
'#prefix' => '

',
'#suffix' => '

',
);

//... more form elements here

//replace_div_2
$form['element_to_be_replaced_2'] = array(
'#type' => 'textfield',
'#title' => t("My conditional field two"),
'#prefix' => '

',
'#suffix' => '

',
);
return $form;
}

function ajax_example_simplest_callback($form, $form_state) {

//... do my stuff here

//normally I would return only the form bit for replacing a single wrapper
//declared in the trigger element, like this:
return $form['element_to_be_replaced_blahblah'];

}

‹ Select Feld - Optionen mit Ländern füllen [gelöst] Kann man in einem Formular über #ajax auch mehrere Elemente triggern? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

ja, geht

Eingetragen von maen (547)
am 23.02.2015 - 09:06 Uhr

function callback_function($form, &$form_state)
{
  $commands = array();
  $commands[] = ajax_command_replace('#element1', drupal_render($form[any form element]));
  $commands[] = ajax_command_replace("#element2", drupal_render($form[any form element]));
  return array('#type' => 'ajax', '#commands' => $commands);
}

  • Anmelden oder Registrieren um Kommentare zu schreiben

Vielen Dank für die schnelle

Eingetragen von bit-checker (28)
am 23.02.2015 - 09:44 Uhr

Vielen Dank für die schnelle Antwort.

Diese Lösung kenne ich schon. Hat aber bei mir nicht funktioniert. Es wird doch nur von ajax das aktualisiert, was in #wrapper des zu ändernden Elements steht und das ist:

...

. In den #wrapper kann ich aber nur eine id eintragen, also auch nur ein Element ändern. Wie kann ich das zweite Element auch bearbeiten?

  • Anmelden oder Registrieren um Kommentare zu schreiben

function ajax_command_replace

Eingetragen von maen (547)
am 23.02.2015 - 10:31 Uhr

function ajax_command_replace fügt ein / ersetzt mittels jquery der replaceWith() Methode. Wenn ich mir das in der Erklärung (auch in den Kommentaren) durchlese, müsste es das aber sein!???

https://api.drupal.org/api/drupal/includes!ajax.inc/function/ajax_command_replace/7
https://api.drupal.org/api/drupal/includes!ajax.inc/function/ajax_command_append/7#comment-39488

  • Anmelden oder Registrieren um Kommentare zu schreiben

mein Quellcode

Eingetragen von bit-checker (28)
am 23.02.2015 - 12:04 Uhr

Irgendwie kann ich den Fehler nicht sehen. So sieht der relevante Quellcode bei mir aus.
Wenn ich das richtig verstehe, kann man mit dem wrapper bei ajax die ID des DIV angeben, deren Inhalt man verändern will.

<?php

function order_produktauswahl_form($form, &$form_state) {

$form['gif-banner']['gif-anzahl'] = array(
'#type' => 'select',
'#title' => t('Anzahl'),
'#prefix' => "

",
'#suffix' => "

",
'#options' => array(
0 => 0,1 => 1,2 => 2,3 => 3,4 => 4,5 => 5,6 => 6,7 => 7,8 => 8,9 => 9,
10 => 10,15 => 15,
20 => 20,25 => 25,
30 => 30,35 => 35,
40 => 40,45 => 45,
50 => 50,60 => 60,70 => 70,80 => 80,90 => 90,100 => 100,
),
'#ajax' => array(
'event' => 'change',
'callback' => 'calc_preis_gif_ajax_callback',
'wrapper' => 'gif-gesamtpreis',
'method' => 'replace',
'effect' => 'fade',
),
);

$form['gif-banner']['gif-gesamtpreis'] = array(
'#title' => t('Gesamtpreis'),
'#type' => 'textfield',
'#size'=> 10,
'#attributes' => array(
'readonly' => 'readonly',
),
'#prefix' => "

",
'#suffix' => "

",
'#default_value' => isset($values['gif-gesamtpreis']) ? $values['gif-gesamtpreis'] :'0,00 €',
);

return $form;
}

function calc_preis_gif_ajax_callback($form, $form_state) {
$form['gif-banner']['gif-gesamtpreis']['#value'] = 'super Preis';

// das funktioniert nicht
$commands = array();
$commands[] = ajax_command_replace('gif-gesamtpreis', drupal_render($form['gif-banner']['gif-gesamtpreis']));
return array('#type' => 'ajax', '#commands' => $commands);

// das funktioniert
// return $form['gif-banner']['gif-gesamtpreis'];
};

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ist gif-gesamtpreis ein

Eingetragen von maen (547)
am 23.02.2015 - 12:11 Uhr

Ist gif-gesamtpreis ein selector??? Also Klasse oder ID? Falls ja fehlt dort ein punkt oder #.

  • Anmelden oder Registrieren um Kommentare zu schreiben

ja, habe ich mit #prefix erstellt

Eingetragen von bit-checker (28)
am 23.02.2015 - 12:23 Uhr

<?php


function order_produktauswahl_form($form, &$form_state) {
   
 
$form['gif-banner']['gif-anzahl'] = array(
   
'#type' => 'select',
   
'#title' => t('Anzahl'),
       
'#prefix' => "<div id='gif-anzahl'>",
   
'#suffix' => "</div>",
   
'#options' => array(
     
0 => 0,1 => 1,2 => 2,3 => 3,4 => 4,5 => 5,6 => 6,7 => 7,8 => 8,9 => 9,
           
10 => 10,15 => 15,
           
20 => 20,25 => 25,
           
30 => 30,35 => 35,
           
40 => 40,45 => 45,
           
50 => 50,60 => 60,70 => 70,80 => 80,90 => 90,100 => 100,
        ),
       
'#ajax' => array(
           
'event' => 'change',
           
'callback' => 'calc_preis_gif_ajax_callback',
           
'wrapper' => 'gif-gesamtpreis',
           
'method' => 'replace',
     
'effect' => 'fade',
        ),
  );
   
 
$form['gif-banner']['gif-gesamtpreis'] = array(
   
'#title' => t('Gesamtpreis'),
       
'#type' => 'textfield',
       
'#size'=> 10,
       
'#attributes' => array(
           
'readonly' => 'readonly',
        ),
       
'#prefix' => "<div id='gif-gesamtpreis'>",
   
'#suffix' => "</div>",
       
'#default_value' => isset($values['gif-gesamtpreis']) ? $values['gif-gesamtpreis'] :'0,00 €',
  );
   
    return
$form;
}
   
   
function
calc_preis_gif_ajax_callback($form, $form_state) {
   
$form['gif-banner']['gif-gesamtpreis']['#value'] = 'super Preis';

   
// das funktioniert nicht
   
$commands = array();
 
$commands[] = ajax_command_replace('gif-gesamtpreis', drupal_render($form['gif-banner']['gif-gesamtpreis']));
  return array(
'#type' => 'ajax', '#commands' => $commands);

   
// das funktioniert
    // return $form['gif-banner']['gif-gesamtpreis'];
};


?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also fehlt, wie schon von

Eingetragen von wla (9461)
am 23.02.2015 - 12:34 Uhr

Also fehlt, wie schon von meinem Vorredner angemerkt, der Lattenzaum (#) um die ID zu markieren in ajax_command_replace. Es muß also dort #gif-gesamtpreis heißen. Im übrigen ist das div Statement falsch. Eine Klasse oder ID gehört in " und nicht in ' geklammert.

  • Anmelden oder Registrieren um Kommentare zu schreiben

wla schrieb Also fehlt, wie

Eingetragen von maen (547)
am 23.02.2015 - 12:36 Uhr
wla schrieb

Also fehlt, wie schon von meinem Vorredner angemerkt, der Lattenzaum (#) um die ID zu markieren in ajax_command_replace. Es muß also dort #gif-gesamtpreis heißen. Im übrigen ist das div Statement falsch. Eine Klasse oder ID gehört in " und nicht in ' geklammert.

Hi Werner,

ich glaube das ist egal!

  • Anmelden oder Registrieren um Kommentare zu schreiben

wenn ich euch nicht hätte

Eingetragen von bit-checker (28)
am 23.02.2015 - 13:01 Uhr

Habe den # nicht gesetzt, daran lag es.
Ich komme jetzt auch ohen 'wrapper' => 'gif-gesamtpreis', im ajax aus.

Vielen Dank!!!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Rolle erstellen nicht zu finden
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
Weiter

Neue Kommentare

  • Rollen
    vor 17 Stunden 59 Minuten
  • Inzwischen sind wir bei
    vor 1 Woche 4 Tagen
  • Migrieren von D7 auf D8/ D10/ D11
    vor 1 Woche 5 Tagen
  • melde mich mal wieder, da ich
    vor 9 Wochen 2 Tagen
  • Hey danke
    vor 9 Wochen 3 Tagen
  • Update: jetzt gibt's ein
    vor 9 Wochen 3 Tagen
  • Hallo, im Prinzip habe ich
    vor 10 Wochen 1 Tag
  • Da scheint die Terminologie
    vor 10 Wochen 1 Tag
  • Kannst doch auch alles direkt
    vor 10 Wochen 5 Tagen
  • In der entsprechenden View
    vor 10 Wochen 5 Tagen

Statistik

Beiträge im Forum: 250237
Registrierte User: 20464

Neue User:

  • ocvk2810
  • marouane.blel
  • capilclinic

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 26 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association