2015-10-03 11 views
6

Ich habe ein Formular mit mehreren Dropdown-Boxen.Kombinieren Sie mehrere einfache jQuery-Funktionen

Wenn der Benutzer "Andere" aus dem Dropdown-Menü auswählt, wird ein anderes div mit einem Eingabefeld nach unten verschoben.

Das Problem ist, dass ich 20+ Dropdown-Boxen so habe. Kann ich nur eine Funktion erstellen, um die zugehörige auszulösen?

<div class="container"> 
    <div> 
     <select id="option1" name="city"> 
      <option value="">Please Choose</option> 
      <option value="Other">Other</option> 
      <option value="London">London</option> 
     </select> 
    </div> 

    <div id="box1"> 
     <input type="text" name="city-other"> 
    </div> 
</div> 

<div class="container"> 
    <div> 
     <select id="option2" name="color"> 
      <option value="">Please Choose</option> 
      <option value="Other">Other</option> 
      <option value="Red">Red</option> 
     </select> 
    </div> 

    <div id="box2"> 
     <input type="text" name="color-other"> 
    </div> 
</div> 

Und meine jQuery-Code:

Hier mein html ist

$("#box1").hide(); 
$('#option1').on('change', function() { 
    if (this.value == 'Other') 
    { 
     $("#box1").slideDown("slow"); 
    } else { 
     $("#box1").slideUp("slow"); 
    } 
}); 

$("#box2").hide(); 
$('#option2').on('change', function() { 
    if (this.value == 'Other') 
    { 
     $("#box2").slideDown("slow"); 
    } else { 
     $("#box2").slideUp("slow"); 
    } 
}); 
+0

meinen Code versuchen, und lassen Sie es mich wissen. .. –

Antwort

1

Demo: http://jsfiddle.net/fn5ac1f7/

$(function() { 
    $(".box").hide(); 
    $('.option').on('change', function() { 
     var parent = $(this).parent().parent(); 
     var children=$(parent).children()[1]; 

     if (this.value == 'Other') 
     { 
      $(children).slideDown("slow"); 
     } else { 
      $(children).slideUp("slow"); 
     } 
    }); 
}); 
1

Verwenden Sie Klassen statt IDs und Klasse sie mögen:

$('.option').on('change', function() { 
    if (this.value == 'Other') 
    { 
     $(this).slideDown("slow"); 
    } else { 
     $(this).slideUp("slow"); 
    } 
}); 

Edit:
To Verstecken Sie die Box, Sie sollten die ID der Auswahl eingeben (innerhalb der Änderung Funktion) durch das:

var this_id = $(this)[0].id; 
this_id = this_id.split('option')[1]; //get the input id 
$("#box" + this_id).hide(); //hide box with same id 
+0

Das rutscht t auf Die Option, nicht die Box. –

+0

Maximillian hat Recht – Dejavu

+0

Ich habe die Antwort bearbeitet. – Tarek

0

nur zum Spaß Demo https://jsfiddle.net/mtffje50/

$(function() { 
    // hide all div with id starting with "box" 
    $("div[id^='box']").hide(); 
    // observe all select with id starting with "option" 
    $("select[id^='option']").on('change', function() { 
     // do the trick here... 
     var name = this.name.toLowerCase() + '-other'; 
     var $parent = $("input[name='" + name + "']").parent().parent(); 
     if (this.value.toLowerCase() == 'other') { 
      $parent.slideDown("slow"); 
     } else { 
      $parent.slideUp("slow"); 
     } 
    }); 
}); 
+0

Ziemlich kompliziert :) – Dejavu

+0

kompliziert? Mit diesen wenigen Codezeilen müssen Sie nicht Ihren gesamten HTML-Code neu schreiben. (Weil Ihr HTML-Code neu geschrieben werden muss, wissen Sie das?) –

+0

Sie haben Recht. Ich versuche das Dropdown und die BOS in einen Container zu legen, um einen anderen Weg zu finden. Habe gerade meinen Code aktualisiert. – Dejavu

0

Verwenden Sie Klassen

$(".box").slideUp(); 
$('.option').on('change', function() { 
var parent = $($(this).parent()).parent(); 
var children=$(parent).children()[1]; 

    if (this.value == 'Other') { 
    $(children).slideDown("slow"); 
    } else { 
    $(children).slideUp("slow"); 
    } 
}); 
+0

Es verschiebt das Dropdown, wenn ich eine Option anstelle von "Andere" – Dejavu

+0

@Dejavu Sie, benötigt, um var Eltern = $ ($ (this) .parent()). Parent(); für Ihre html-Struktur (da der Container-Elternteil ein Elternteil des Elterns von select ist), auch der $ (". box"). slideUp(); muss oben erwähnt werden. http://jsfiddle.net/#&togetherjs=66wOuC1roU –

Verwandte Themen