Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Themes & Theming ›

Feld in Node Form mit Javascript berechnen

Eingetragen von purplepoint (13)
am 11.09.2012 - 17:14 Uhr in
  • Themes & Theming
  • Drupal 7.x

Ich möchte gerne in einem Node Formular zwei Felder während der Eingabe multiplizieren:
z.B.
Eingabe in Feld 1: 2
Eingabe in Feld 2: 100
Ausgabe Resulat in einem dritten Feld: 200

Also das, was mit Computed Fields ohne Probleme möglich ist, aber bereits während dem Ausfüllen des Formulars. Um das Script zu laden, habe ich ein Modul geschrieben:

<?php

 
function bestellformular_form_alter(&$form, &$form_state, $form_id) {
    if(
$form_id == 'orders_offers_changes_node_form') {
      
drupal_add_js(drupal_get_path('module', 'bestellformular') .'/calculate.js');
        }
  }
?>

Die Datei calculate.js sieht wie folgt aus:

function calc(){
var anzahl = $('#edit-field-details-und-0-field-anzahl-und-0-value').val();
var preis = $('#edit-field-details-und-0-field-preis-pro-person-und-0-value').val();
var gesamt = anzahl * preis;
$('#gesamt').text(gesamt);}

Wie ich das Resultat in das dritte Feld reinbekomme, weiss ich noch nicht - wahrscheinlich über den Default Wert und dann das Feld nicht editierbar machen. Für den Moment gebe ich das Resultat mal einfach in einer span (natürlich mit der ID gesamt) aus. Das Problem: Es wird nichts berechnet. Habe ich einen Überlegungsfehler gemacht? Das Script wird auf jeden Fall eingebunden, und auch die ID's von Feld 1 und Feld 2 sind korrekt, das habe ich überprüft.

Vielen Dank für eure Hilfe!

‹ Wie kann ich einen fixierten Block in den absoluten Vordergrund stellen? Benutzerprofil Formular anpassen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

hallo purpelpoint so wie ich

Eingetragen von 1kubik (903)
am 11.09.2012 - 18:37 Uhr

hallo purpelpoint
so wie ich das auf den ersten blick sehe fehlt dir ja noch ein sogenannter eventhandler,
also wann soll das 3. feld den berechnet werden?
es reicht ja nicht das die funktion dazu geladen wird sondern
die muss ja auch noch aufgerufen werden.
ein eventhandler kann das drücken einer taste, die mausbewegung, das klicken eines buttons usw. sein,
wenn as ereignniss (event) passiert ruf dieser dann die funktion auf

auf die schnelle hab ich dieses tutorial dazu gefunden

http://matthiasschuetz.com/jquery-tutorial-interaktionen-mit-events-steuern

besten gruss
stef

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Stef Peinlich -

Eingetragen von purplepoint (13)
am 12.09.2012 - 09:19 Uhr

Hallo Stef

Peinlich - logisch, dass es so nicht funktionieren kann. Ich muss den entsprechenden Input-Feldern "onKeyUp='calculate()'" hinzufügen. Allerdings habe ich das bis jetzt noch nicht geschafft.
Habs versucht mit

$form["field_anzahl"]["und"][0]["#attributes"] = "onKeyup='calculate()'";

in der function bestellformular_form_alter, was nicht klappt. Wie macht man das richtig?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Dem Feld eine ID geben und

Eingetragen von Exterior (2903)
am 12.09.2012 - 09:40 Uhr

Dem Feld eine ID geben und den Eventhandler mittels jQuery setzen. Dann brauchst du den onkeyup-Kram nicht.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Vielen Dank für den Hinweis!

Eingetragen von purplepoint (13)
am 12.09.2012 - 10:07 Uhr

Vielen Dank für den Hinweis! Kannst du mir noch etwas genauer erklären, wie ich den Eventhandler mittels jQuery setzen kann?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Kennst du dich allgemein mit

Eingetragen von Exterior (2903)
am 12.09.2012 - 10:15 Uhr

Kennst du dich allgemein mit jQuery ein wenig aus? Ansonsten kannst du auch mal eine .js-Datei von einem Modul öffnen, die dürften idR jQuery verwenden.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nein, ich kenne mich leider

Eingetragen von purplepoint (13)
am 12.09.2012 - 10:31 Uhr

Nein, ich kenne mich leider mit jQuery nicht aus, versuche mich aber reinzudenken. Also: Laut Google muss die Struktur etwa folgendermassen aussen:

(function ($) {
    //add drupal 7 code
    Drupal.behaviors.myfunction = {
        attach: function(context, settings) {
//end drupal calls

//some jquery goodness here...

  }}})
(jQuery);

Richtig? Und der Eventhandler wird ungefähr so gesetzt:
$('element').keyup(function() { });

Wie bringe ich das Ganze nun zusammen?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also, um die Sache zu

Eingetragen von purplepoint (13)
am 12.09.2012 - 11:54 Uhr

Also, um die Sache zu konkretisieren:

Ich habe die Felder field_anzahl, field_preis und field_total. Im Formular haben sie die IDs #edit-field-anzahl-und-0-value, #edit-field-preis-und-0-value sowie #edit-field-total-und-0-value.

Folgendermassen habe ich das Skript eingebunden:

function bestellformular_form_alter(&$form, &$form_state, $form_id) {
  if($form_id == 'orders_offers_changes_node_form') {
   drupal_add_js(drupal_get_path('module', 'bestellformular') .'/calculate.js');
    }
}

Die calculate.js sieht im Moment folgendermassen aus:

$(document).ready(function(){
  $('#edit-field-anzahl-und-0-value').keyup(function() {
    var anzahl = parseFloat($(this).val());
    var preis= parseFloat($('#edit-field-preis-und-0-value').val());
    $('#edit-total-und-0-value').text((anzahl * preis));
});
});

Liege ich damit einigermassen richtig? Was fehlt noch?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Aloah, die Sache mit dem Essen geben und fischen lehren ...

Eingetragen von maen (547)
am 28.09.2012 - 08:04 Uhr

Wenn Du dir dieses Tutorial anschaust sollten Deine Fragen beantwortet sein... -> Tutorial

LG

maen

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • 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
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Woche 1 Tag
  • Hey danke
    vor 1 Woche 1 Tag
  • Update: jetzt gibt's ein
    vor 1 Woche 2 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 1 Stunde
  • Da scheint die Terminologie
    vor 2 Wochen 4 Stunden
  • Kannst doch auch alles direkt
    vor 2 Wochen 4 Tagen
  • In der entsprechenden View
    vor 2 Wochen 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 2 Wochen 4 Tagen
  • gelöst
    vor 5 Wochen 23 Stunden
  • Ja natürlich. Dass ist etwas,
    vor 5 Wochen 1 Tag

Statistik

Beiträge im Forum: 250233
Registrierte User: 20450

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» 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 8 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