2012-06-23 25 views
9

JSFiddle

के माध्यम से बदल गया है मैं बेला में 3 option रों (1 खाली) के साथ एक select सेटअप किया था। जब मैं foo से bar मैन्युअल रूप से स्विच करता हूं, तो change श्रोता सामान्य रूप से आग लग जाता है।jQuery चुना onchange घटना फायरिंग नहीं जब मूल्य जे एस

अब अगर मैं code posted in some answers here साथ जे एस के माध्यम से select रीसेट, change घटना, नए चयनित खाली विकल्प के लिए आग नहीं करता है इसके अलावा, अगर मैं विकल्प है जिसके reset बटन onchange घटना जीता 'में क्लिक करने से पहले का चयन किया गया चयन टी आग या तो।

मुझे यकीन है कि select हूँ के मूल्य है ऊपर समारोह है, जो इस fiddle में देखा जा सकता के साथ बदला जा रहा है, लेकिन select के onchange घटना बस आग नहीं करता है।

मैंने onchange, onclick, oninput घटनाओं का कोई फायदा नहीं हुआ है। अभी मैं सोच रहा हूं कि मुझे एक उत्परिवर्तन ऑब्सर्वर का उपयोग करना चाहिए या डीओएम से प्रस्तुत किए गए चुने हुए तत्व को हटा देना चाहिए और दूसरा बनाना है, लेकिन शायद मैं इसे ओवरथिंक कर रहा हूं। किसी भी मदद की सराहना की है।

इसके अलावा

: jQuery Chosen reset

इस उत्तर मदद नहीं की:

इस उत्तर मुझे एक बहुत मदद की how to fire onchange event in chosen prototype javascript select box?

कोड भविष्य में संदर्भ के लिए है, तो jsfiddle.net निकाल दिया जाता है:

एचटीएमएल

<div id="wrapper"> 
    <select id="chosen"> 
     <option value="!!EMPTY VALUE!!"></option> 
     <option value="foo">foo</option> 
     <option value="bar">bar</option> 
    </select> 
</div> 
<br> 
<button id="reset">Reset</button> 

जे एस

$(function() { 
    $('#chosen').chosen(); 

    $('#wrapper').on('change', '#chosen', function() { 
     console.log('onchange: ' + this.value); 
    }); 

    $('#reset').click(function() { 
     $("#chosen").val('').trigger("liszt:updated"); //doesn't work 
     //$("#chosen").prop('selectedIndex', 0).trigger("liszt:updated"); //doesn't work either 
     console.log('reset: ' + $('option:selected').val()); 
    }); 
}); 
+0

** एएसपी.Net वेबफॉर्म ** ** मैं इस प्रश्न में आया जब मेरे ऐप को यह समस्या प्रतीत होती थी लेकिन यह एएसपी वेबफॉर्म वैलिडेटर्स के कारण जावास्क्रिप्ट त्रुटि साबित हुई। यह देखें [jQuery-UI टिकट] (http://bugs.jqueryui.com/ticket/4071#comment:9) – sparebytes

उत्तर

9

आप फ़ेब्रिकियो मैट द्वारा टिप्पणी है कि मेरे लिए काम किया ताकि अन्य लोग डॉन से बाहर एक जवाब प्रतिलिपि बनाई जा रही $(selector).trigger("change")

$('#reset').click(function() { 
     $("#chosen").val('').trigger("change"); //doesn't work 
     //$("#chosen").prop('selectedIndex', 0).trigger("liszt:updated"); 
     console.log('reset: ' + $('option:selected').val()); 
    }); 
+1

*** तेह हथेली के लिए अत्यधिक चेहरा ***। ओह, धन्यवाद आदमी! –

+0

9 मिनट जब तक मैं स्वीकार नहीं कर सकता। =] –

+0

आपका स्वागत है!:] –

4

साथ मान बदलने के बाद परिवर्तन को गति प्रदान करने की जरूरत है इस पोस्ट को न देखें और पहले जैसा समाधान मैंने याद किया।

$('#chosen_chzn').remove(); 
$('#chosen').val('').change().removeClass('chzn-done').chosen(); 

See this on his Fiddle

मैं मूल रूप से .change() के बजाय .trigger('liszt:updated') कॉल का उपयोग जारी रखने की कोशिश की लेकिन बात नहीं बनी। .removeClass('chzn-done') के पीछे तर्क नहीं देखा लेकिन यह भी आवश्यक है या आपका चयन बॉक्स गायब हो जाएगा।

+3

असल में, मुझे लगता है कि मुझे अभी तक एक और "बेहतर" समाधान मिला है। बहुत यकीन नहीं है। मुझे लगता है कि मैंने अभी [विस्तार 2] (http://ivaynberg.github.com/select2/) में अपग्रेड किया है जो मूल परिवर्तन पर '.change() 'को कॉल करने के साथ' परिवर्तन 'ईवेंट को सक्रिय करता है। –

+1

+1 हालांकि जो लोग चुने गए हैं, उनके लिए मैं 'chzn-done' कक्षा को हटाने के पीछे तर्क को पूरी तरह से याद नहीं करता लेकिन मुझे पूरा यकीन है कि' chzn-done' 'प्रदर्शन लागू होता है: none' 'उन तत्वों का चयन करें जिन्हें आपने' .chosen() 'कहा है, और उस कक्षा के तत्वों पर '.chosen()' को कॉल करना काम नहीं करेगा। –

+1

मेरा मानना ​​है कि यदि आप chzn-done को नहीं हटाते हैं तो चुने गए कॉलिंग() कुछ भी नहीं करते - यह मानता है कि यह पहले ही सेट हो चुका है। एक गरीब मनुष्य गार्ड का क्रमबद्ध करें। – Andy

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