Page 1 of 1

[SOLVED] Formularelement onchange= einsetzen

Posted: Fri 22. Jul 2016, 20:45
by kmstario
Hallöchen zusammen,

derzeit bastel ich mal an einem interaktiven Formular, bei dem durch eine Liste(select) bei bestimmten Optionen Felder eingeblendet werden. Nun hänge ich allerdings bei der Funktion fest. Es muss im <select.. ein Befehl

Code: Select all

onchange="setVisibility(this)"
hinein.

Lässt sich das mit Bordmitteln lösen? Ich habe schon einige Varianten probiert, komme aber nicht zum gewünschten Ergebnis :(

Grüße, Andreas

Re: Formularelement onchange= einsetzen

Posted: Sat 23. Jul 2016, 07:45
by Oliver Georgi
Nicht nötig. Inline JavaScript Attribute sind in Zeiten von verfügbaren Events unnötig.

Mit jQuery:

Code: Select all

var setVisibility = function(){
    var $this = $(this);
    // do whatever you want to do
};
$('#selectid').on('change', setVisibility);

Re: Formularelement onchange= einsetzen

Posted: Sat 23. Jul 2016, 11:28
by Oliver Georgi

Re: Formularelement onchange= einsetzen

Posted: Wed 27. Jul 2016, 15:58
by kmstario
Hallöchen nochmal,

vielen dank für den Anstoss :wink: . Hatte schon etwas rumprobiert und es nun endlich hinbekommen.

Und zwar so (falls es mal jemand braucht):

Code: Select all

$(function () {
     $('#messageBox').hide();
     $('#select-id').change(function () {
         $('#messageBox').hide();
         if (this.options[this.selectedIndex].value == 'optiontext') {
             $('#messageBox').show();
         }
     });
 });

Vg Andreas

Re: [SOLVED] Formularelement onchange= einsetzen

Posted: Wed 27. Jul 2016, 16:28
by Oliver Georgi
Unbedingt vereinfachen!

Code: Select all

$(function() {
    var $messagebox = $('#messageBox');
    if($messagebox.length) {
        $messagebox.hide(); // gib style="display:none" mit, dann ist das überflüssig
        $('#select-id').change(function() {
            if(this.options[this.selectedIndex].value === 'optiontext') {
                $messagebox.show();
            } else {
                $messagebox.hide();
            }
        });
    }
 });