2010-05-22 15 views
5

मेरे पास एक चुनिंदा सूची वाला एक पृष्ठ है (एएसपी.नेट एमवीसी पेज)एचटीएमएल चयन सूची: क्यों बदले में दो बार बुलाया जाएगा?

इस तरह निर्दिष्ट चयनित सूची और विनिमय घटना:

<%=Html.DropDownList("CompanyID", Model.CompanySelectList, "(select company)", new { @class = "data-entry-field", @onchange = "companySelectListChanged()" })%> 

कंपनी चयन करें चुनिंदा फ़ंक्शन दो बार बुलाया जा रहा है?

मैं कॉलर प्राप्त करने के लिए this question में निफ्टी कोड का उपयोग कर रहा हूं।

दोनों बार कॉलर ऑनचेंज इवेंट है, हालांकि अगर मैं कॉलर्स कॉलर का उपयोग कर देखता हूं:

arguments.callee.caller.caller 

पहला कॉल कॉलर (मुझे लगता है) के रूप में कुछ सिस्टम कोड देता है और दूसरा कॉल रिफंड अपरिभाषित होता है ।

मैं अपरिष्कृत के लिए केवल एक बार प्रतिक्रिया करने के लिए अपरिभाषित की जांच कर रहा हूं, लेकिन यह आदर्श प्रतीत नहीं होता है, whcy बदले में दो बार बुलाया जाएगा?

अद्यतन:

ठीक है, अपराधी मिला! ... मेरे अलावा :-) लेकिन कंपनी को कॉल करने का मुद्दा चयन चयनसूची दो बार खड़ा है।

अस्थिर ईवेंट सीधे बताए गए चयन पर सेट है। यह कंपनी सिलेक्टलिस्ट चेंज फ़ंक्शन को कॉल करता है।

.. 'डेटा-एंट्री-फील्ड' कक्षा को नोटिस करें, अब एक अलग लिंक्ड जावास्क्रिप्ट फ़ाइल में इस वर्ग के साथ सभी फ़ील्ड पर एक परिवर्तन ईवेंट एक फ़ंक्शन से जुड़ा हुआ है जो सेव बटन के रंग को बदलता है। इसका मतलब है कि बदले में दो घटनाएं हैं, लेकिन कंपनी सिलेक्टलिस्ट चंगड को दो बार बुलाया जाता है?

अतिरिक्त बाइंडिंग निम्नानुसार सेट है:

$ ('डेटा-एंट्री-फील्ड')। बाइंड ('कीप्रेस कीप चेंज', फ़ंक्शन (ई) {हाईलाइटसेवबटन();});

चुनिंदा सूची में 2 परिवर्तन ईवेंट होने के लिए संभव है, यह मान लेगा कि सेटिंग कीप्रेस & कीप घटनाएं कुछ तोड़ सकती हैं?

कोई विचार?

किसी अन्य अद्यतन:

चयनित तत्व ठीक दिखता है और यदि मैं अतिरिक्त 'परिवर्तन' बाध्यकारी को हटा देता हूं तो सभी काम करता है। जब 'चेंज' बाध्यकारी जोड़ा जाता है कि घटना एक बार आग लगती है और हार्ड वायर्ड 'ऑनचेंज' को दो बार निकाल दिया जाता है।

यदि दोनों घटनाएं jQuery के माध्यम से बाध्य होती हैं तो सभी ठीक काम करते हैं, ऐसा लगता है कि हार्ड-वायर्ड एक्सचेंज और jquery बाध्य परिवर्तन घटनाओं को मिलाकर मिश्रित नहीं किया जा सकता है? मुझे लगता है कि यह मेरे प्रश्न का उत्तर देता है लेकिन आईई के साथ एक समस्या की तरह लगता है और इन घटनाओं को jquery के साथ बाध्यकारी लगता है।

+0

क्या आप समस्या को एक साधारण एप्लिकेशन में अलग कर सकते हैं जिसके लिए आप नियंत्रक का पूरा कोड पोस्ट कर सकते हैं और देख सकते हैं? –

+0

क्या आपके पास कोई अन्य कोड है जो ईवेंट हैंडलर को तत्व से जोड़ने के लिए एक और दृष्टिकोण का उपयोग करता है? फ़ंक्शन की तरह लगता है कि फ़ंक्शन की तरह एक ईवेंट हैंडलर * दो बार * - एक बार 'ऑनक्लिक' विशेषता की सीधी सेटिंग में और एक बार किसी अन्य तंत्र के माध्यम से पंजीकृत होता है (उदाहरण के लिए, 'attachEvent() 'या प्रोटोटाइप जैसे ढांचे के माध्यम से या jQuery)। – Pointy

+0

एक्सचेंज इवेंट सीधे बताए गए चयन सूची में बाध्य है, कंपनी चयन चयन करें() फ़ंक्शन दो अन्य फ़ंक्शंस को कॉल करता है जो jquery AJAX पोस्ट बनाते हैं। कोई अन्य कोड अस्थायी घटना को बाध्यकारी नहीं कर रहा है। –

उत्तर

3

मैं आपके मूल्यांकन से सहमत हूं। मैंने http://gutfullofbeer.net/onchange.html पर अपना छोटा उदाहरण अपडेट किया है जिसमें डीओएम 0 हैंडलर ("एक्सचेंज" विशेषता वाला एक सेट) के अलावा एक jQuery हैंडलर शामिल है। यह एक jQuery बग, या कम से कम आईई अजीबता से निपटने के लिए jQuery की विफलता प्रतीत होता है।

मैंने jQuery टिकट 6593 लॉग किया।

+0

आपकी मदद के लिए धन्यवाद। –

+0

कोई समस्या नहीं - एक दिलचस्प नई बग को उजागर करने के लिए धन्यवाद! – Pointy

2

आईई 8 का उपयोग करते समय मुझे इस समस्या का भी सामना करना पड़ा और इसे ठीक करने के लिए कुछ बदलाव किए।

ड्रॉपडाउन सूची पर विनिमय ईवेंट निर्दिष्ट करने के बजाय, मैंने jquery.change() ईवेंट का उपयोग किया।

मार्कअप:

@Html.DropDownList("drpList", myList, new { @class = "myClass", id = "drpList" }) 

स्क्रिप्ट:

$(function() { 
    $('#drpList').change(function() { 
    .... your functionality 
    }); 
}); 

यह मेरे लिए काम करता .. इस मदद आशा।

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