Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

[gelöst]Registrierungsbutton Text ändern mit jQuery

Eingetragen von ThuleNB (380)
am 30.04.2018 - 20:28 Uhr in
  • Allgemeines zu Drupal
  • Drupal 7.x oder neuer

Hallo Community,

ich nutze aktuell dieses Module, um den Button-Text auf der Registrierungsseite zu ändern:

<?php
function registration_button_override_form_alter(&$form, &$form_state, $form_id)
{
 
//check to see if user is logged in so that this is only displayed to anon users that are registering
    
global $user;
     if (
$user->uid == 0) {
     if (
$form_id == 'user_register_form') {

    
// Change register button text.
    
$form['actions']['submit']['#value'] = t('Jetzt registrieren');

     }
  }
}
?>

Das funktioniert soweit. Jetzt müsste ich den Code anpassen, dass sicht der Button-Text nur ändert, wenn in einem bestimmten Feld des Registrierungsformular ein bestimmter Wert ausgewählt ist.

Das habe ich mit der zusätzlichen Bedingung probiert:

<?php
if (isset($row->field_data_field_registrierung_als[0]['value']) == 1)
?>

Der Button-Text ändert sich nicht. Ich bin kein professioneller Programmierer, aber die Seite muss wahrscheinlich neu laden, wenn das besagte Feld ausgewählt wird, damit der Button-Text geändert wird, oder? Hat jemand eine Ahnung wie ich meinen Code anpassen müsste?

‹ PHP 7.2.8 und Drupal 7.59 [gelöst]Registrierungsbutton Text ändern mit jQuery ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Das kann nur javascript/JQuery

Eingetragen von ronald (3857)
am 01.05.2018 - 09:39 Uhr

Während etwas im Browser eingegeben wird, kann nur der Browser darauf reagieren.

Du wirst also ein JavaScript für diese Seite schreiben müssen, das in der Seite abläuft und die Selektoren bedienen kann.
Hinweis - du musst das onChange-Event des betroffenen Formularfeldes abfangen und in dieser Funktion die Value-Eigenschaft des Buttons ändern.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für diesen Hinweis,

Eingetragen von ThuleNB (380)
am 02.05.2018 - 06:43 Uhr

Danke für diesen Hinweis, Ronald. Ich bin kein Programmierer, aber ich probiere es mal und bestimmt finde ich im Netz den ein oder anderen hilfreichen Artikel.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo nochmal,ich habe mich

Eingetragen von ThuleNB (380)
am 03.05.2018 - 21:17 Uhr

Hallo nochmal,

ich habe mich nun an den richtigen Code herangenähert, er funktioniert aber noch nicht ganz.

Mein HTML:

<select id="edit-field-registrierung-als-und" name="field_registrierung_als[und]" class="form-select required">
<option value="_none">- Wert wählen -</option>
<option value="1">A</option>
<option value="2">B</option>
</select>

<input id="edit-submit--2" name="op" value="Neues Benutzerkonto erstellen" class="form-submit" type="submit">

Mein jQuery:

(function ($) {
$("#edit-field-registrierung-als").change(function() {
if $( this.value == "2")
$("#edit-submit--2").val("Registrieren");
}
}) (jQuery);

Die Selektoren müssten eigentlich stimmen. Ich habe den Code schon einige Male umgestellt, aber es springt nicht an. Ist für euch Erfahrene Programmierer ein Fehler ersichtlich?

VG, Thomas

  • Anmelden oder Registrieren um Kommentare zu schreiben

ich schubs dich nochmal

Eingetragen von ronald (3857)
am 03.05.2018 - 22:52 Uhr

so wie das jetzt da steht, wird deine Funktion beim Aufbau der Seite ausgeführt.

Sie sollte aber ausgeführt werden, nachdem etwas gewählt wurde.

Schau mal nach einem onSelect event des options Objects oder auch onChange

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke :) Aber habe ich nicht

Eingetragen von ThuleNB (380)
am 04.05.2018 - 12:19 Uhr

Danke :)

Aber habe ich nicht mit dem Befehl schon abgedeckt:

$("#edit-field-registrierung-als").change(function() {

Sorry für meine Anfängerfragen, ich lerne aber.

  • Anmelden oder Registrieren um Kommentare zu schreiben

du hast recht

Eingetragen von ronald (3857)
am 04.05.2018 - 23:53 Uhr

mit dieser Funktion wird der Trigger abgefangen.

Ob er wirklich abgefangen wird, kannst du testen, indem du einen alert("Debug info") einfügst.

Es kann sein, dass du dich irgendwo vertippt hast, und deshalb das Event nicht diese Funktion aufruft.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich komme dem Ganzen näher ...

Eingetragen von ThuleNB (380)
am 10.05.2018 - 07:13 Uhr

ich habe jetzt folgendes HTML und dieses jQuery Code:

<head>
  <title>Button-Test</title>
</head>

<body>

  <div class="field-type-list-text field-name-field-registrierung-als field-widget-options-select form-wrapper" id="edit-field-registrierung-als">
    <div class="form-item form-type-select form-item-field-registrierung-als-und">
      <label for="edit-field-registrierung-als-und">Registrierung als <span class="form-required" title="Diese Angabe wird benötigt.">*</span></label>
      <select id="edit-field-registrierung-als-und" name="field_registrierung_als[und]" class="form-select required"><option value="_none">- Wert wählen -</option><option value="1">Kommunaler Anbieter (Stadt, Gemeinde, Landkreis, kommunales Unternehmen)</option><option value="2">Gewerblicher Anbieter</option></select>
    </div>
  </div>
  <input id="edit-submit--2" name="op" value="Neues Benutzerkonto erstellen" class="form-submit" type="submit">
</body>

jQuery:

$("#edit-field-registrierung-als-und").change(function() {
if ( this.value == "2") {
$("#edit-submit--2").val("Registrieren");
}
}) (jQuery);

Auf JSFiddle funktioniert dieser Code. Wenn ich ihn aber über das Modul JS Injector einbinde, funktioniert er nicht. Hat jemand eine Ahnung warum? Preprocess JS und Inline JS habe ich nicht aktiviert und ich habe als Position die Standard "Kopfbereich" ausgewählt.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi. es kann sein, dass das

Eingetragen von Hyp1 (1463)
am 10.05.2018 - 09:34 Uhr

Hi.

es kann sein, dass das Skript ausgeführt wird,
bevor die Seite geladen wurde und das Element

Zitat:

$("#edit-field-registrierung-als-und")

im DOM Vorhanden ist.

a. Der Code gehört in ein Dokument ready Konstrukt:

// Shorthand for $( document ).ready()
$(function() {
$("#edit-field-registrierung-als-und").change(function() {
if ( this.value == "2") {
$("#edit-submit--2").val("Registrieren");
}
}) (jQuery);

});

b. Wäre es am besten wenn das Skript nur in der Seite geladen wird, in der es auch gebraucht wird.

MfG

Robert

  • Anmelden oder Registrieren um Kommentare zu schreiben

Es kann auch helfen,

Eingetragen von ronald (3857)
am 10.05.2018 - 22:18 Uhr

das Script im Footer unterzubringen.
Da kann man hoffen, sofern die Seite nicht asynchron aufgebaut wird, dass die anzusprechenden Element geladen sind, wenn das Script ausgeführt wird.

Aber besser ist immer, alle Scriptausführungen nach einem Ready-Event auszulösen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Vielen Dank für eure Hilfe.

Eingetragen von ThuleNB (380)
am 16.05.2018 - 06:37 Uhr

Vielen Dank für eure Hilfe. Ich habe beides probiert, aber der Button-Text ändert sich einfach nicht. Der Code mit dem "Ready" Konstrukt habe ich so übernommen. Bei JSFiddle funktioniert es, aber nicht auf meiner Webseite. Ich habe auch den Tipp mit dem Fußbereich versucht, was leider auch nicht klappt. Auch meine Einstellungen habe ich schon oft überprüft, z. B. ob ich die richtige Seite/Pfad angegeben habe. Habt ihr noch eine Idee, wie ich dem Problem auf die Spur kommen kann?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe die Seite mit debug funktion

Eingetragen von ronald (3857)
am 11.05.2018 - 14:06 Uhr

(F12) angesehen.
Dort hagelt es Javascript-Fehler.

Ich habe sie mir nicht im Detail angesehen, aber dort scheint der "Hase im Pfeffer" zu liegen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für den Hinweis. Ich

Eingetragen von ThuleNB (380)
am 12.05.2018 - 15:14 Uhr

Danke für den Hinweis. Ich habe das auch versucht, finde aber nur diese Fehler (Chrome Konsole):

Uncaught TypeError: $ is not a function at js_injector_6.js?p8mcdf:2
(anonymous) @ js_injector_6.js?p8mcdf:2

GET https://my-business-location.com/sites/all/themes/mbl/css/images/ui-bg_f... 404 ()

Sorry für die wahrscheinlich blöde Frage, aber wie kann ich die vielen Fehler, die du erwähnst, einsehen?

In der IE Konsole sehe ich nur:

SCRIPT5007: Objekt erwartet

  • Anmelden oder Registrieren um Kommentare zu schreiben

So wie ich das sehe, bindest

Eingetragen von Hyp1 (1463)
am 12.05.2018 - 15:20 Uhr

So wie ich das sehe, bindest das Javascript nicht so ein,
wie es in Drupal üblich ist, sondern über ein Modul(injector.js) welches den Fehler wirft.
https://www.drupal.org/docs/7/api/javascript-api/managing-javascript-in-...

MfG

Robert

  • Anmelden oder Registrieren um Kommentare zu schreiben

Der Link hat mir tatsächlich

Eingetragen von ThuleNB (380)
am 14.05.2018 - 13:47 Uhr

Der Link hat mir tatsächlich weitergeholfen. Insbesondere diese Passage:

Zitat:

Using jQuery
jQuery is now namespaced to avoid conflicts with other Javascript libraries such as Prototype. All your code that expects to use jQuery as $ should be wrapped in an outer context like so.

(function ($) {
// All your code here
}(jQuery));
If you don't, you may see the error Uncaught TypeError: Property '$' of object [object DOMWindow] is not a function or similar.

Nachdem ich meinen Code in diesen Wrapper gepackt hatte, funktionierte alles wunderbar.

Vielen Dank dafür und für die geduldige Hilfen von allen!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich muss diesen Beitrag

Eingetragen von ThuleNB (380)
am 31.07.2018 - 09:42 Uhr

Ich muss diesen Beitrag nochmal öffnen:

Wie oben beschrieben, hat alles gut funktioniert und ich habe es mit jQuery geschafft, den Button-Text im Registrierungsformular zu ändern, wenn ein Feld einen bestimmten Wert enthält.
Es handelt sich um dieses Formular: https://my-business-location.com/registrierung (das erste Feld bedingt den Button-Text)

Jetzt habe ich bemerkt, dass wenn der Button-Text mit jQuery geändert (Option 2 im ersten Feld), das Formular nicht abgeschickt wird. Die Seite lädt einfach neu und die Formulardaten bleiben enthalten. Wenn ich das Formular mit der Option 1 im ersten Feld (also Button-Text ändert sich nicht), dann funktioniert alles wunderbar.

Es muss also am jQuery liegen. In der Console bekomme ich einen Fehler: Found 2 elements with non-unique id #edit-name. Dieser hängt mit LoginTobggon zusammen. Auch wenn ich das Modul deaktiviere und der Fehler nicht mehr erscheint, habe ich das Problem.

Ich habe schon mit Devel probiert, dem Fehler auf die Spur zu kommen. Leider ohne Erfolg. Hat von euch jemand eine Idee, woran das liegen kann?

  • Anmelden oder Registrieren um Kommentare zu schreiben

pass auf, dass du nicht die ID des buttons änderst

Eingetragen von ronald (3857)
am 31.07.2018 - 09:52 Uhr

und auch der type muss erhalten bleiben, weil er ansonsten nicht erkannt werden kann.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke Ronald, für deine

Eingetragen von ThuleNB (380)
am 31.07.2018 - 10:12 Uhr

<input type="submit" id="edit-submit--2" name="op" value="Jetzt registrieren" class="form-submit">
<input type="submit" id="edit-submit--2" name="op" value="Kostenpflichtig registrieren" class="form-submit">

Danke Ronald, für deine Antwort. Ich habe das geprüft und es scheint mir hier alles in Ordnung zu sein.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Du hast doch recht: Wenn ich

Eingetragen von ThuleNB (380)
am 31.07.2018 - 12:33 Uhr

Du hast doch recht: Wenn ich die Werte in dem Feld, das den Button-Text beeinflusst, ändere, dann bleibt die ID wie oben beschrieben gleich. Aber wenn ich den Submit-Button klicke und die Seite neu lädt, dann sieht es so aus:

<input type="submit" id="edit-submit" name="op" value="Jetzt registrieren" class="form-submit">

Die ID ändert sich also von "edit-submit--2" zu "edit-submit". Weißt du, wie ich das verhindern könnte?

  • Anmelden oder Registrieren um Kommentare zu schreiben

ich kann gerade nicht herumtesten

Eingetragen von ronald (3857)
am 31.07.2018 - 14:43 Uhr

aber versuche mal die ID explizit zu setzen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe das über die

Eingetragen von ThuleNB (380)
am 31.07.2018 - 15:18 Uhr

Ich habe das über die submit() Funktion probiert:

(function ($) {
$(function() {
$("#register-form").submit(function() {
$("#edit-submit--2").attr("id", "edit-submit--2");
});
});
}(jQuery));

Hiermit sollte doch eigentlich nach "Submit" die betroffene ID gleich bleiben, funktioniert leider nicht.
Hast du eine andere Idee, wie ich die ID explizit setzen kann?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe die submit id über

Eingetragen von ThuleNB (380)
am 01.08.2018 - 10:32 Uhr

Ich habe die submit id über ein eigenes Modul definiert und sie ändert sich nun auch nicht mehr. Allerdings besteht der Fehler immer noch. Ich denke, dass das System den Button-Text erwartet, der vor dem Ändern mit jQuery angezeigt wird. Mit dem geänderten Button-Text funktioniert die Logik nicht mehr. Kann das sein?

EDIT: Ich habe nun herausgefunden, dass der #value tatsächlich zur Validierung herangezogen wird. Das ist in meinem Fall ungünstig, da ich eben diesen Wert ändern muss. Hat jemand eine Ahnung, wie ich es trotzdem bewerkstelligen kann?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Lösung

Eingetragen von ThuleNB (380)
am 01.08.2018 - 15:50 Uhr

So habe ich das Problem nun lösen können:

(function ($) {
  $(function() {

    // Create a copy of the button
    $('#registersubmit').after('<input id="new-submit" class="form-submit" value="Jetzt registrieren">');
    // Hide original
    $('#registersubmit').hide();
    // When copy  is clicked, "click" the original
    $('#new-submit').click(function(){
      $('#registersubmit').click();
    });
    $("#edit-field-registrierung-als-und").change(function() {
      if ( this.value == "2") {
        $("#new-submit").val("Kostenpflichtig registrieren");
      }
      else {
        $("#new-submit").val("Jetzt registrieren");
      }
    });
  });
}(jQuery));

Vielen Dank für die Hilfe!

  • 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 Tag 2 Stunden
  • Hey danke
    vor 1 Tag 21 Stunden
  • Update: jetzt gibt's ein
    vor 2 Tagen 15 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 1 Stunde
  • Da scheint die Terminologie
    vor 1 Woche 4 Stunden
  • Kannst doch auch alles direkt
    vor 1 Woche 4 Tagen
  • In der entsprechenden View
    vor 1 Woche 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 4 Tagen
  • gelöst
    vor 4 Wochen 23 Stunden
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 1 Tag

Statistik

Beiträge im Forum: 250233
Registrierte User: 20449

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