2015-10-03 5 views
6

मेरे पास कई ड्रॉपडाउन बॉक्स हैं।एकाधिक सरल jQuery फ़ंक्शंस को जोड़ें

यदि उपयोगकर्ता ड्रॉपडाउन मेनू से "अन्य" चुनते हैं, तो इनपुट फ़ील्ड वाला दूसरा div नीचे स्लाइड हो जाएगा।

समस्या यह है कि मेरे पास 20+ ड्रॉपडाउन बॉक्स हैं। क्या मैं संबंधित एक को ट्रिगर करने के लिए केवल 1 फ़ंक्शन बना सकता हूं?

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

और मेरे jQuery कोड:

यहाँ मेरी एचटीएमएल है

$("#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

मेरी कोड कोशिश करते हैं और मुझे पता है। .. –

उत्तर

1

डेमो: 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

उपयोग के बजाय आईडी और वर्ग वर्गों उन्हें पसंद:

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

संपादित करें:
करने के लिए बॉक्स को छुपाएं, आपको चुनिंदा इनपुट की आईडी प्राप्त करनी चाहिए (परिवर्तन के अंदर समारोह) यह द्वारा:

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

वह टी स्लाइड करता है वह विकल्प, बॉक्स नहीं। –

+0

मैक्सिमिलियन सही है – Dejavu

+0

मैंने जवाब संपादित किया। – Tarek

0

सिर्फ मनोरंजन के डेमो के लिए 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

बहुत जटिल :) – Dejavu

+0

जटिल? कोड की इन कुछ पंक्तियों के साथ आपको अपने सभी एचटीएमएल कोड को फिर से लिखना नहीं है। (क्योंकि आपके एचटीएमएल कोड को फिर से लिखने की जरूरत है, आपको यह पता है?) –

+0

आप सही हैं। मैं एक और तरीके खोजने के लिए ड्रॉपडाउन और बोस को एक कंटेनर में डालने की कोशिश कर रहा हूं। बस मेरा कोड अपडेट किया गया। – Dejavu

0

उपयोग कक्षाएं

$(".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

यदि मैं var parent = $ ($ (this)। Parent()) प्राप्त करने के लिए आवश्यक "अन्य" – Dejavu

+0

@Deavavu के बजाय कोई विकल्प चुनता हूं तो यह ड्रॉपडाउन स्लाइड करता है। आपकी एचटीएमएल संरचना के लिए (क्योंकि कंटेनर पैरेंट चयन के माता-पिता का अभिभावक है), $ ("बॉक्स") भी। slideUp(); शीर्ष पर उल्लेख करने की जरूरत है। http://jsfiddle.net/#&togetherjs=66wOuC1roU –

संबंधित मुद्दे