Form Field einblenden, wenn AJAX-Result false ist.

  • Hallo zusammen,


    ich würde gerne meine Komponente etwas ausbauen und wage mich in der Frontemd-Gestaltung mehr und mehr an das Thema jQuery und AJAX heran.



    Nun habe ich folgendes:


    Feld A ist ein Dropdown
    Feld B ist ein Textfeld
    Feld C ist ein Textfeld


    Wenn Feld A = YES (1) ist, dann wird Feld B eingeblendet



    Die Abhängigkeit zwischen Feld A und Feld B bekomme ich mit


    Code
    showon = "FeldA:1"


    in meiner XML-Formdeklaration gelöst. Das funktioniert mittlerweile wunderbar.


    Nun läuft über Feld B eine AJAX-Abfrage (im Grunde wird hier geprüft, ob der eingegebene Wert schon in der Datenbank vorhanden ist). Wenn diese "false" zurück gibt, soll Feld C eingeblendet werden.


    Nun lässt sich dies wahrscheinlich im Layout direkt irgendwie mit jQuery zurecht werkeln. Ich würde mich aber noch viel mehr darüber freuen, wenn das gar nicht notwendig wäre - d.h. wenn ich Feld C schon im XML anlegen könnte und erst einmal ausblende (hier würde es sicherlich auch in XML den Typ "hidden" geben). Wenn das Result dann "false" ist soll dieses Feld dann aber doch eingeblendet werden.


    Habt ihr da Ansätze, die ich ausprobieren könnte?

  • Ich habe das Problem nun zunächst folgendermaßen gelöst:


    Code
    <field name = "overrideinformation" type = "list" label = "COM_BESTIA_FIELDS_OVERRIDEINFORMATION_LABEL" description = "COM_BESTIA_FIELDS_OVERRIDEINFORMATION_DESC" filter = "safehtml" default = "0"> <option value = "1">JYES</option> <option value = "0">JNO</option></field>


    Dieses Feld wird im Layout zunächst ausgeblendet:


    Code
    js(document).ready(function() { // Hide override selection box jQuery('#jform_overrideinformation').hide(); jQuery('#jform_overrideinformation-lbl').hide();


    Der AJAX-Check ruft nun bei Misserfolg des Tests eine Funktion auf, die die Felder wieder einblendet:


    Code
    // Hide override selection boxjQuery('#jform_overrideinformation').show();jQuery('#jform_overrideinformation-lbl').show();


    Nett ist, dass dieses Feld in der XML-Deklaration nun in Showon-"Abhängigkeiten" weiter verwendet werden kann:


    Code
    <field name = "overridevalue"
    type = "text"
    class = "inputbox"
    size = "40"
    label = "COM_BESTIA_FIELDS_OVERRIDEVALUE_LABEL"
    description = "COM_BESTIA_FIELDS_OVERRIDEVALUE_DESC"
    showon = "overrideinformation:1"
    filter = "safehtml" />
  • Was mir nun noch auffällt (vielleicht liegt die Lösung näher, als ich denke):


    Code
    jQuery('#jform_overrideinformation').val(0);


    führt nicht dazu, dass auch "overridevalue" (abhängig von "overrideinformation") ausgeblendet wird.