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 - 18: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 - 19: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 - 10: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 - 10: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 - 11: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 - 11: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 - 11: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 - 12: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 - 09: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

  • Canvas Palette: Eine fertige Komponentenbibliothek für Drupal Canvas
  • Hilfe zu Updates oder Composer
  • Vergleich Drupal und Contao
  • [geloest] Blocks in Bootstrap nebeneinander darstellen und nicht untereinander
  • DrupalCamp Frankfurt 27-28 November 2026
  • Bitte mein Bentzerkonto löschen
  • Beim Aufruf einiger Inhalte erhalte ich folgende Fehlermeldung
  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
  • Titel ausblenden
Weiter

Neue Kommentare

  • Danke ich werde mir die
    vor 4 Wochen 15 Stunden
  • Vielen Dank für Ihren
    vor 4 Wochen 3 Tagen
  • Composer ist sehr ratsam
    vor 4 Wochen 5 Tagen
  • Vielen Dank für den
    vor 5 Wochen 19 Stunden
  • Die alten CMS Vergleiche von contentmanager.de
    vor 5 Wochen 1 Tag
  • Gut gemacht
    vor 5 Wochen 1 Tag
  • Layout Builder etc. z.B. für Landing Pages
    vor 5 Wochen 1 Tag
  • Links
    vor 5 Wochen 3 Tagen
  • Moin,wow, sehr gutes
    vor 5 Wochen 4 Tagen
  • Dass ist eine spannende
    vor 5 Wochen 5 Tagen

Statistik

Beiträge im Forum: 250316
Registrierte User: 20566

Neue User:

  • Robertspaft
  • drupalthemes
  • rofilm

» Alle User anzeigen

User nach Punkten sortiert:
wla9466
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 21 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