दिलचस्प पोस्ट
यह जांच कैसे करें कि क्या एक खिड़कियां प्रपत्र पहले से ही खुला है, और अगर यह है तो इसे बंद करें? मैं Visual Studio 2010 में एक CUDA ऐप कैसे शुरू करूं? कुकीज़ के साथ उद्देश्य-सी असिंक्रोनस वेब अनुरोध जांचें कि क्या ईमेल मौजूद है php? SQL सर्वर में एक डेटाबेस से दूसरे डेटाबेस को कॉपी करें मैं अपने पायथन साइट-पैकेज निर्देशिका का स्थान कैसे प्राप्त करूं? AJAX कैसे काम करता है? Excel में एक कॉलम में अद्वितीय मानों की गणना करें यूआरएल में संस्करण संख्या को हटा दें बैंडविड्थ की गणना कैसे AJAX और jQuery के साथ एक django प्रपत्र पोस्ट करने के लिए आरएसपीसी का उपयोग कब करें ()? अजगर खोल में मौजूदा निर्देशिका को कैसे जानना / बदलना है? SLF4J का उपयोग कर लॉगबैक करने के लिए java.util.logging.Logger (JUL) भेजें / रीडायर / मार्ग भेजें। दृश्य स्टूडियो में स्वत: स्वरूपण बंद करें

एक <इनपुट> तत्व पर jQuery परिवर्तन ईवेंट – पिछले मान को बनाए रखने के लिए कोई भी तरीका?

आज सुबह मैं खोज रहा हूं और मुझे कोई सरल समाधान नहीं मिल रहा है … मूल रूप से, मैं एक इनपुट तत्व में एक बदलाव पर कब्जा करना चाहता हूं, लेकिन पिछले मूल्य को भी जानता हूं।

यहां एक बदलाव की घटना है और इसका सरलतम रूप में एक इनपुट तत्व है स्पष्ट रूप से, मैं $ (elem) .val () के साथ नया मान प्राप्त कर सकता हूं, लेकिन क्या पिछली मान पाने के लिए मुझे एक गुप्त तरीके से गुम है? मैं ऐसा करने के लिए jQuery एपीआई में कुछ भी नहीं देखता, लेकिन शायद किसी ने पहले से ही यह किया है और कुछ सुझाव हैं?

<script> $(document).ready(function(){ $('#myInputElement').bind('change', function(){ //var oldvalue = ??? var newvalue = $(this).val(); }); }); </script> <input id="myInputElement" type="text"> 

मैं अपना स्वयं का समाधान लिखने के खिलाफ नहीं हूं, मैं यह सुनिश्चित करना चाहता हूं कि मैं यहां पहिये को फिर से नहीं बना रहा हूं।

Solutions Collecting From Web of "एक <इनपुट> तत्व पर jQuery परिवर्तन ईवेंट – पिछले मान को बनाए रखने के लिए कोई भी तरीका?"

एक बेहतर तरीका यह है कि पुराने मूल्य को .data का उपयोग करके स्टोर करना है। यह एक वैश्विक देव का निर्माण करता है जो आपको दूर रहना चाहिए और तत्व के भीतर समाहित जानकारी रखता है। वैश्विक वार्स खराब क्यों हैं, इस बारे में एक वास्तविक दुनिया उदाहरण यहां प्रलेखित किया गया है

जैसे

 <script> //look no global needed:) $(document).ready(function(){ // Get the initial value var $el = $('#myInputElement'); $el.data('oldVal', $el.val() ); $el.change(function(){ //store new value var $this = $(this); var newValue = $this.data('newVal', $this.val()); }) .focus(function(){ // Get the value when input gains focus var oldValue = $(this).data('oldVal'); }); }); </script> <input id="myInputElement" type="text"> 

यह चाल कर सकती है:

 $(document).ready(function() { $("input[type=text]").change(function() { $(this).data("old", $(this).data("new") || ""); $(this).data("new", $(this).val()); console.log($(this).data("old")); console.log($(this).data("new")); }); }); 

यहां डेमो

 $('#element').on('change', function() { $(this).val($(this).prop("defaultValue")); }); 

जब भी फोकस इनपुट फ़ील्ड को छोड़ देता है (जो कि आप चाहते हैं कि क्या करना चाहिए) आपके पास इनपुट फ़ील्ड का मूल्य छिपा हुआ फ़ील्ड में कॉपी हो सकता है नीचे दिए गए कोड देखें:

 <script> $(document).ready(function(){ $('#myInputElement').bind('change', function(){ var newvalue = $(this).val(); }); $('#myInputElement').blur(function(){ $('#myHiddenInput').val($(this).val()); }); }); </script> <input id="myInputElement" type="text"> 

(untested, लेकिन यह काम करना चाहिए)।

हर डोम तत्व में डिफ़ॉल्ट विशेषता नाम का एक विशेषता है। यदि आप डेटा के पहले परिवर्तन की तुलना करना चाहते हैं तो आप उस डिफ़ॉल्ट मान को प्राप्त करने के लिए उपयोग कर सकते हैं।

Russ जवाब में वह फोकस ईवेंट को बांधता है मुझे नहीं लगता कि यह आवश्यक है

आप परिवर्तन ईवेंट में पुराने मान को स्टोर कर सकते हैं

 <script> $(document).ready(function(){ var newValue = $('#myInputElement').val(); var oldValue; $('#myInputElement').change(function(){ oldValue = newValue; newValue = $(this).val(); }); }); </script> <input id="myInputElement" type="text"> 

कुछ बिंदु

$। $ $ का उपयोग करें इसके बजाय $ .fn.data

 // regular $(elem).data(key,value); // 10x faster $.data(elem,key,value); 

उसके बाद, आप अपने जीवन को उलझाए बिना, ईवेंट वस्तु के माध्यम से पिछले मान प्राप्त कर सकते हैं:

  $('#myInputElement').change(function(event){ var defaultValue = event.target.defaultValue; var newValue = event.target.value; }); 

सावधान रहें कि defaultValue अंतिम सेट मान नहीं है। यह मूल्य उस फ़ील्ड के साथ आरंभ किया गया था लेकिन आप "oldValue" का ट्रैक रखने के लिए $। डेटा का उपयोग कर सकते हैं

मैं आपको अनुशंसा करता हूं कि आप हमेशा अपने ईवेंट हैंडलर फ़ंक्शंस में "ईवेंट" ऑब्जेक्ट की घोषणा करें और उन्हें फायरबग (console.log (event)) या कुछ चीज़ों के साथ निरीक्षण करें। आपको बहुत सारी उपयोगी चीजें मिलेंगी जो आपको जेक्यूब ऑब्जेक्ट बनाने / एक्सेस करने से बचाएगी (जो बहुत अच्छी हैं, लेकिन अगर आप तेजी से हो सकते हैं …)

मैंने जॉय गुररा के सुझाव के आधार पर इन कार्यों को बनाया, इसके लिए धन्यवाद। मैं थोड़ा विस्तार कर रहा हूं, शायद कोई इसे इस्तेमाल कर सकता है पहली फ़ंक्शन चेक डीफॉल्ट () को कहा जाता है जब कोई इनपुट बदलता है, तो दूसरा कहा जाता है जब फ़ॉर्म jQuery.post का उपयोग करके सबमिट किया जाता है। div.updatesubmit मेरा सबमिट बटन है, और क्लास 'needupdate' एक संकेतक है कि एक अपडेट किया गया है लेकिन अभी तक सबमिट नहीं किया गया है।

 function checkDefaults() { var changed = false; jQuery('input').each(function(){ if(this.defaultValue != this.value) { changed = true; } }); if(changed === true) { jQuery('div.updatesubmit').addClass("needsupdate"); } else { jQuery('div.updatesubmit').removeClass("needsupdate"); } } function renewDefaults() { jQuery('input').each(function(){ this.defaultValue = this.value; }); jQuery('div.updatesubmit').removeClass("needsupdate"); } 

मुझे एक गंदा चाल मिली लेकिन यह काम करता है, आप परिवर्तन से पहले मूल्य प्राप्त करने के लिए होवर फ़ंक्शन का उपयोग कर सकते हैं!