मेरे पास पहले भी एक ही समस्या थी। जहां तक मुझे पता है, ब्राउजर सही घटनाओं के माध्यम से चिपकने पर कोई ईवेंट जारी नहीं करता है, न ही जब वे पहले इस्तेमाल किए गए मानों की सूची से चयन करते हैं।
मैंने अपने ईवेंट हैंडलर को ब्लर इवेंट में बाध्यकारी करके इसे काफी अच्छे तरीके से हल करने का अंत किया। एकमात्र मामला यह नहीं था जब वे माउस के साथ एक मूल्य पेस्ट करते थे, फिर सबमिट करने के लिए एंटर कुंजी दबाएं। मैं एक छोटे से hackery के माध्यम से इस के आसपास प्राप्त करने में सक्षम था:
$(element)
.bind('keydown blur', handlerFunction)
.keydown(function(event) {
if (event.keyCode === 13 /* Enter Key */) {
event.preventDefault();
event.stopPropagation();
}
})
.keyup(function(event) {
if (event.keyCode === 13 /* Enter Key */) {
$(this).closest('form').submit();
}
});
मूलतः, यह काम करता है क्योंकि jQuery क्रम में वे बाध्य में घटनाओं को अंजाम होगा। आम तौर पर, फॉर्म सबमिशन एंटर कीप्रेस के कीडाउन पर होता है। कुंजीपटल हैंडलर समय अपने जादू करने के लिए, आपको उस फॉर्म सबमिशन में देरी करने की आवश्यकता है जब तक कि कीप घटना न हो, तो अन्य कीप हैंडलर पहले चला सकते हैं।
अब, आपने कहा था कि आप एक प्लगइन का उपयोग कर रहे थे जो उपयोगकर्ताओं की घटना पर प्रतिक्रिया करने से पहले देरी जोड़ता है। इसका मतलब है कि आप इस तकनीक verbatim का उपयोग करने में सक्षम नहीं हो सकता है। एक चीज जो काम कर सकती है, फॉर्म को सबमिट करने से पहले सीधे हैंडलर फ़ंक्शन को कॉल करना होगा। ऐसा करने के लिए, आप करने के लिए पिछले KeyUp हैंडलर बदल जाएगा:
.keyup(function(event) { // Part 2
if (event.keyCode === 13 /* Enter Key */) {
handlerFunction.call(this, event); // force it to happen now
$(this).closest('form').submit();
}
});
जोश कश्मीर के रूप में पहले उल्लेख किया है, तो आप बस प्रस्तुत घटना के लिए कुछ अपने फार्म पर बाध्य कर सकता है इसी तरह कुछ करने के लिए। यदि आप अजाक्स कर रहे हैं, तो, पास विकल्पों में async: false
सेट करना सुनिश्चित करें, अन्यथा फॉर्म आगे बढ़ेगा और कॉल को पूरा करने के इंतजार किए बिना सबमिट करेगा।