घटना .changeपर jquery का उपयोग करते inputसमय केवल तभी निकाल दिया जाएगा जब इनपुट फोकस खो देता है
मेरे मामले में, मुझे इनपुट वैल्यू में परिवर्तन होते ही सेवा को कॉल करना होगा (यदि मान मान्य है तो जाँच करें)। मैं इसे कैसे पूरा कर सकता हूं?
घटना .changeपर jquery का उपयोग करते inputसमय केवल तभी निकाल दिया जाएगा जब इनपुट फोकस खो देता है
मेरे मामले में, मुझे इनपुट वैल्यू में परिवर्तन होते ही सेवा को कॉल करना होगा (यदि मान मान्य है तो जाँच करें)। मैं इसे कैसे पूरा कर सकता हूं?
जवाबों:
स्पष्टीकरण और उदाहरण के लिए अद्यतन
उदाहरण: http://jsfiddle.net/pxfunc/5kpeJ/
विधि 1. inputघटना
आधुनिक ब्राउज़रों में inputघटना का उपयोग करते हैं । जब उपयोगकर्ता टेक्स्ट फ़ील्ड, टाइपिंग, पूर्ववत कर रहा होता है, तो यह घटना आग लग जाएगी, मूल रूप से कभी भी मूल्य एक मान से दूसरे में बदल जाता है।
JQuery में ऐसा करते हैं
$('#someInput').bind('input', function() {
$(this).val() // get the current value of the input field.
});
jQuery 1.7 के साथ शुरू, के bindसाथ बदलें on:
$('#someInput').on('input', function() {
$(this).val() // get the current value of the input field.
});
विधि 2. keyupघटना
पुराने ब्राउज़रों के लिए keyupईवेंट का उपयोग करें (यह कीबोर्ड पर एक बार कुंजी जारी करने के बाद आग लगाएगा, यह ईवेंट एक प्रकार का गलत पॉज़िटिव दे सकता है क्योंकि जब "w" रिलीज़ होता है तो इनपुट वैल्यू बदल जाती है और keyupईवेंट फ़ायर हो जाता है, लेकिन तब भी जब उपयोग हो "शिफ्ट" कुंजी keyupघटना आग जारी की है, लेकिन इनपुट में कोई बदलाव नहीं किया गया है।) यदि उपयोगकर्ता राइट-क्लिक करता है और संदर्भ मेनू से चिपकता है तो भी यह विधि फायर नहीं करती है:
$('#someInput').keyup(function() {
$(this).val() // get the current value of the input field.
});
विधि 3. टाइमर ( setIntervalया setTimeout)
keyupआप की सीमाओं के आसपास पाने के लिए एक टाइमर सेट कर सकते हैं समय-समय पर मूल्य में बदलाव का निर्धारण करने के लिए इनपुट के मूल्य की जांच करें। आप इस टाइमर चेक का उपयोग setIntervalया कर सकते हैं setTimeout। इस तो सवाल पर चिह्नित जवाब देखें: jQuery पाठ बॉक्स परिवर्तन घटना या एक काम उदाहरण का उपयोग के लिए बेला को देखने focusऔर blurघटनाओं शुरू करने और एक विशिष्ट इनपुट क्षेत्र के लिए टाइमर को रोकने के लिए
innerTextया valueविशेषता (उपयोगकर्ता इनपुट का अनुकरण) एक MutationObserver ईवेंट jsfun.net/pxfunc/ को ट्रिगर करेगा 04chpws / 1 (MutationObserver ईवेंट लॉगिंग के लिए कंसोल.लॉग देखें)। क्या आपके पास एक अलग परीक्षण मामला है जो मैं देख सकता हूं?
यदि आपको HTML5 मिल गया है:
oninput (आग तभी लगती है जब वास्तव में कोई परिवर्तन होता है, लेकिन तुरंत ऐसा होता है)अन्यथा आपको इन सभी घटनाओं की जांच करने की आवश्यकता है जो इनपुट तत्व के मूल्य में बदलाव का संकेत दे सकती हैं:
onchange onkeyup( नहीं) keydown या keypressइनपुट के मूल्य अभी तक उस में नई कीस्ट्रोक नहीं होगा के रूप में)onpaste (जब समर्थित)और शायद:
onmouseup (मैं इस बारे में निश्चित नहीं हूं)HTML5 के साथ और jQuery का उपयोग किए बिना, आप inputईवेंट का उपयोग कर सकते हैं :
var input = document.querySelector('input');
input.addEventListener('input', function()
{
console.log('input changed to: ', input.value);
});
यह हर बार इनपुट के पाठ परिवर्तनों को आग देगा।
IE9 + और अन्य ब्राउज़रों में समर्थित।
जैसा कि दूसरों ने पहले ही सुझाव दिया है, आपके मामले में समाधान कई घटनाओं को सूँघना है ।
इस काम को करने वाले प्लगइन्स अक्सर निम्नलिखित घटनाओं के लिए सुनते हैं:
$ इनपुट ।ऑन ( 'चेंज कीडाउन कीप मूसडाउन क्लिक माउसअप' , हैंडलर );
यदि आपको लगता है कि यह फिट हो सकता है, तो आप जोड़ सकते हैं focus, blurऔर अन्य घटनाएँ भी।
मैं सुनने के लिए घटनाओं में अधिक नहीं करने का सुझाव देता हूं, क्योंकि यह उपयोगकर्ता की व्यवहार के अनुसार निष्पादित करने के लिए ब्राउज़र मेमोरी आगे की प्रक्रियाओं में लोड करता है।
ध्यान दें: ध्यान दें कि जावास्क्रिप्ट के साथ एक इनपुट तत्व के मूल्य को बदलना (जैसे कि jQuery .val()विधि के माध्यम से ) ऊपर की किसी भी घटना को आग नहीं देगा।
(संदर्भ: https://api.jquery.com/change/ )।
.val()उदाहरण के लिए इनपुट क्षेत्र पर एक परिवर्तन ईवेंट के लिए, आप कुछ इस तरह करेंगे ... $('#element').val(whatever).change()
यदि आप चाहते हैं कि जब भी कुछ तत्व में परिवर्तन किया जाए, तो ईवेंट को निकाल दिया जाए, तो आप कीप इवेंट का उपयोग कर सकते हैं ।
onchange, या राज्य को ट्रैक करना है। keydownकाम नहीं करता है क्योंकि यह इनपुट की स्थिति बदलने से पहले आग हो जाती है।
// .blur तब ट्रिगर होता है जब एलिमेंट फोकस खो देता है
$('#target').blur(function() {
alert($(this).val());
});
// मैन्युअल रूप से उपयोग करने के लिए ट्रिगर:
$('#target').blur();
की तरह jQuery ईवेंट नहीं है KeyUp और कुंजी दबाने जो आप इनपुट एचटीएमएल तत्वों के साथ उपयोग कर सकते हैं। आप अतिरिक्त रूप से ब्लर () ईवेंट का उपयोग कर सकते हैं ।
keypressईवेंट के दौरान किसी इनपुट के मान को मज़बूती से नहीं देख सकते क्योंकि दबाया गया कुंजी अभी तक उस मान को नहीं बदलेगा।