2012-06-26 9 views
10

ठीक है मुझे नहीं लगता कि यह क्यों काम नहीं कर रहा है। यह बहुत आसान लगता है।एचटीएमएल <select> JQuery .change काम नहीं कर रहा

यहाँ मेरी ड्रॉप-डाउन मेनू है:

<div> 
    <form> 
     <select id='yearDropdown'> 
      <c:forEach var="years" items="${parkYears}"> 
       <option value=/events.html?display_year=${years}<c:if test="${currentYear == years}">selected="selected"</c:if>>${years}</option> 
      </c:forEach> 
     </select> 
    </form> 
</div> 

और यहाँ है जावास्क्रिप्ट

$("#yearDropdown").change(function() { 
    alert('The option with value ' + $(this).val()); 
}); 

अभी मैं सिर्फ यह तो मैं कार्यक्षमता जोड़ सकते हैं काम कर रहे प्राप्त करना चाहते हैं। धन्यवाद!

+0

क्या है नियंत्रण से प्रदान की गई निर्गम (स्रोत देखें, तत्व का निरीक्षण, आदि ...):

बस $ (दस्तावेज़) में .change घटना .ready बाँध? –

+0

मुझे माफ़ कर दो, मुझे नहीं पता कि आपका क्या पूछ रहा है। मैं एक सीएस छात्र हूँ। और मुझे व्यावहारिक रूप से जावास्क्रिप्ट – theCamburglar

+0

का कोई ज्ञान नहीं है क्या आपके पास यह $ (दस्तावेज़) में चल रहा है। पहले (फ़ंक्शन() {यह कोड यहां}); या सिर्फ एक $ (फ़ंक्शन() {कोड यहां}); ? मुझे सही लगता है ... – ntgCleaner

उत्तर

27

वह कोड वाक्य रचनात्मक रूप से सही है। सबसे अधिक संभावना यह गलत समय पर चल रहा है।

आप जब DOM तैयार होने घटना बाध्य करने के लिए चाहता हूँ:

$(function(){ /* DOM ready */ 
    $("#yearDropdown").change(function() { 
     alert('The option with value ' + $(this).val()); 
    }); 
}); 

या, live का उपयोग करें:

$("#yearDropdown").live('change', function() { 
    alert('The option with value ' + $(this).val()); 
}); 

या, का उपयोग delegate:

$(document.body).delegate('#yearDropdown', 'change', function() { 
    alert('The option with value ' + $(this).val()); 
}); 

या, यदि आप jQueryका उपयोग कर रहे हैं 210:

$("#yearDropdown").on('change', function() { 
    alert('The option with value ' + $(this).val()); 
}); 

बहरहाल, यह आमतौर पर एक बार ब्राउज़र मार्कअप प्रतिपादन समाप्त हो गया है स्क्रिप्ट को निष्पादित करने के लिए सबसे अच्छा है।

+0

इससे कोई फर्क नहीं पड़ता क्योंकि 'नया' प्रत्येक नए जोड़े गए तत्व पर लागू होगा। (अगर यह गलत है तो मुझे सही करें) –

+3

@ डेरेक: आप गलत हैं, यह उन तत्वों पर लागू होता है जो अभिव्यक्ति से मेल खाते हैं (#yearDropdown) उस पल को निष्पादित किया जाता है। jQuery नए तत्वों या किसी भी चीज़ के लिए समान रूप से निगरानी नहीं करता है। – WhyNotHugo

+1

@ user1469925 अंतर यह है कि दस्तावेज लोड होने के बाद इस कार्य को बुलाया जाता है, और डीओएम बनाया गया है। आपका कोड जितनी जल्दी पढ़ता है निष्पादित करता है, और डोम अभी तक तैयार नहीं हो सकता है - चयन अभी तक मौजूद नहीं है। – WhyNotHugo

0

आपका कोड सही है और मेरे लिए काम कर रहा है, यहाँ देखें: http://jsfiddle.net/mobweb/2Skp9/

क्या आप वाकई jQuery ठीक से लोड किया गया है कर रहे हैं?

0

सुनिश्चित नहीं हैं कि अगर इस में मदद मिलेगी, लेकिन आप इस कोशिश कर सकते:

$("#yearDropdown").live("change", function() { 
    alert('The option with value ' + $(this).val()); 
}); 
+4

के अनुसार अपडेट किया जाना चाहिए 'jQuery 1.7 के रूप में, .live() विधि बहिष्कृत है। ईवेंट हैंडलर संलग्न करने के लिए .on() का उपयोग करें। ' –

+0

यह है? मुझे लगता है कि रिलीज नोट्स पर पढ़ने की जरूरत है। जानकारी के लिए धन्यवाद। – Logard

+0

http://liveisdeprecated.com –

1

मैं अपने कोड in jsFiffle कोशिश की है। मैंने मैन्युअल रूप से विकल्पों के रूप में कुछ साल जोड़े। यह सही काम करता है।

$(document).ready(function(){ 
    $("#yearDropdown").change(function() { 
     alert('The option with value ' + $(this).val()); 
    });​ 
}); 
संबंधित मुद्दे