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

  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
  • Titel ausblenden
  • Ich brauche dringen Hilfe zu Updates oder ggf. wwie geht Composer?
  • Dynamische Ansicht von Seiteninhalt (als Tabelle?)
  • Vergabe von Berechtigungen für bestimmte Rollen; mir fehlt der Haken bzw. das „Veröffentlicht“
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • Rolle erstellen nicht zu finden
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
Weiter

Neue Kommentare

  • Was für einen Server benutzt
    vor 1 Woche 3 Tagen
  • Wenn die Subdomain auf
    vor 1 Woche 5 Tagen
  • ordnerstruktur
    vor 1 Woche 5 Tagen
  • Die Subdomain muß auf den
    vor 2 Wochen 1 Tag
  • Verwende doch das Tag dafür,
    vor 5 Wochen 2 Tagen
  • Guckst du hier: step by step
    vor 5 Wochen 2 Tagen
  • Guckst du hier: step by step
    vor 5 Wochen 2 Tagen
  • Ich habe ja keine Angst vor
    vor 6 Wochen 4 Tagen
  • Ist grundsätzlichmachbar – aber nichts für „einfach mal schnell“
    vor 7 Wochen 3 Stunden
  • Vielen Dank erst einmal, aber
    vor 7 Wochen 1 Tag

Statistik

Beiträge im Forum: 250289
Registrierte User: 20517

Neue User:

  • Wolf Dab
  • Scottteday
  • MichaelPeeno

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