পাঠ্য বাক্সে কীভাবে পুরানো মান onনচেঞ্জ () ইভেন্ট সহ পাবেন


88

পৃষ্ঠা লোড হওয়ার সাথে সাথে আমার কাছে একটি পাঠ্য বাক্স এবং একটি মান রয়েছে। এখন যদি ব্যবহারকারী পাঠ্য বাক্সে যে কোনও কিছুকে সরিয়ে দেয় তবে আমি পরিবর্তিত মান (নতুন মান) এবং পুরাতন মান পেতে চাই তবে যখন আমি এলিমেন্ট.মূল্য করি তখন তার প্রদত্ত কেবল পরিবর্তিত মানই হবে

পুরানো মান পেতে কোন পরামর্শ?

নীচে আমার কোড

<head>
    <script type="text/javascript">
      function onChangeTest(changeVal) {
        alert("Value is " + changeVal.value);
      }
    </script>
  </head>
  <body>
    <form>
      <div>
          <input type="text" id="test" value ="ABS" onchange="onChangeTest(this)">  
      </div>
    </form>
  </body>
</html>

আগাম ধন্যবাদ

উত্তর:


70

element.defaultValue আপনাকে আসল মান দেবে।

অনুগ্রহ করে নোট করুন যে এটি কেবল প্রাথমিক মানটিতে কাজ করে।

"পুরানো" মানটি প্রতিবার পরিবর্তিত হওয়ার জন্য যদি আপনার এটির প্রয়োজন হয় তবে একটি প্রসারণ সম্পত্তি বা অনুরূপ পদ্ধতি আপনার প্রয়োজনীয়তা পূরণ করবে


শুধু একটি নোট. আমি ফায়ারফক্স এলিমেন্টে আবিষ্কার করেছি getঅ্যাট্রিবিউটে ("মান") এটিও আসলটি প্রকাশ করে বলে মনে হচ্ছে ... এটি ক্রস-ব্রাউজার / স্ট্যান্ডার্ড জিনিস কিনা তা জানাতে আমি যথেষ্ট জানি না।
CHESirekow

48
এলিমেন্ট.ডিফল্টভ্যালু <ইনপুট> ট্যাগে মান সেট করে দেয়। এই মানটি যদি সম্পাদনা বা অন্য কোনও জাভাস্ক্রিপ্ট দ্বারা পরিবর্তিত হয় তবে উপাদান, ডিফল্টভ্যালু এটি (নতুন) পুরানো মান ফেরত দেবে না।
সাব্রেভল্ফি

ধন্যবাদ সাব্রে ওল্ফাই, আপনার মন্তব্যটি চিহ্নিত করে আমার সমস্যাটি সমাধান করেছেন। একাধিকবার মান পরিবর্তন করতে হয়েছিল তাই উপরেরটি করা ভাল ছিল না।

179

আপনাকে পুরানো মানটি ম্যানুয়ালি সঞ্চয় করতে হবে। আপনি এটি বিভিন্ন উপায়ে সংরক্ষণ করতে পারেন। প্রতিটি পাঠ্যবক্সের জন্য মান সংরক্ষণ করতে আপনি জাভাস্ক্রিপ্ট অবজেক্টটি ব্যবহার করতে পারেন, বা আপনি কোনও লুকানো ক্ষেত্র ব্যবহার করতে পারেন (আমি এটি সুপারিশ করব না - অত্যধিক এইচটিএমএল ভারী), অথবা আপনি নিজে পাঠ্যবক্সে একটি এক্সপেনডো সম্পত্তি ব্যবহার করতে পারেন:

<input type="text" onfocus="this.oldvalue = this.value;" onchange="onChangeTest(this);this.oldvalue = this.value;" />

তারপরে পরিবর্তনটি পরিচালনা করার জন্য আপনার জাভাস্ক্রিপ্ট ফাংশনটি দেখতে এইরকম দেখাচ্ছে:

    <script type="text/javascript">
    function onChangeTest(textbox) {
        alert("Value is " + textbox.value + "\n" + "Old Value is " + textbox.oldvalue);
    }
    </script>

25
আমি আপনাকে উত্তরটি ভোট দিয়ে বুঝতে পারি যদি এটি কাজ না করে তবে এটির কোনও অনুচিত উত্তর। আমি একটি উত্তর সরবরাহ করেছি যা ব্যবহারকারীর প্রয়োজনীয়তার সমাধান করেছে। এই কোডটি পরীক্ষা করা হয়েছিল। এটি সম্পূর্ণ। এবং এটি এমন কিছু করে যা গ্রহণযোগ্য উত্তর দেয় না (আপনি সর্বদা ডিফল্টভ্যালু সম্পত্তিটি দেখতে পারেন তবে ব্যবহারকারী যদি একাধিকবার মান পরিবর্তন করে তবে কী হবে?)
গ্যাব্রিয়েল ম্যাকএডামস

এখানে যে পরিবর্তনটি প্রস্তাবিত হয়েছিল তা ভুল। প্রথমত, একবার সতর্কতা আসার পরে ক্ষেত্রটি ফোকাস হারিয়ে ফেলেছে। অনফোকাস ইভেন্টটি বরখাস্ত করার পরে তার পরে যে কোনও পরিবর্তন ঘটবে। দ্বিতীয়ত, ইনপুট ফিল্ডের ওনিচ ইভেন্টটি তার হারানো ফোকাস না হওয়া পর্যন্ত চালিত হবে না।
গ্যাব্রিয়েল ম্যাকএডামস

4
আপনি যদি একাধিকবার মানটি পরিচালনা করেন তবে এটি আরও ভাল কাজ করে। উপরের উত্তর (এলিমেন্ট.ডিফল্টভ্যালু) কেবল একবার কাজ করে। এটি এক :)

4
সহজ এবং কার্যকর। আশা করি আমি আপনাকে +1 এর চেয়েও বেশি দিতে পারতাম।
ইয়ান কেম্প

4
@ গ্রিজেশচৌহান: না। আমরা পুরানো মানকে ফোকাসে সেট করছি। এর পরে, প্রতিটি পরিবর্তনের পরে, আমরা এটি আবার সেট করি।
গ্যাব্রিয়েল ম্যাকএডামস

6

আমি সুপারিশ করেছিলাম:

function onChange(field){
  field.old=field.recent;
  field.recent=field.value;

  //we have available old value here;
}

6

আপনার এইচটিএমএল 5 ডেটা অ্যাট্রিবিউট ব্যবহার করা উচিত। আপনি আপনার নিজস্ব বৈশিষ্ট্য তৈরি করতে এবং সেগুলিতে বিভিন্ন মান সংরক্ষণ করতে পারেন।


2

আমি স্মরণ করি এমন একটি নোংরা কৌশল, 'নাম' বৈশিষ্ট্যে ভেরিয়েবলগুলি লুকিয়ে রাখছে (যা আমি সাধারণত অন্য উদ্দেশ্যে ব্যবহার করি না):

select onFocus=(this.name=this.value) onChange=someFunction(this.name,this.value)><option...

কিছুটা অপ্রত্যাশিতভাবেই, পুরানো এবং নতুন মান উভয়ই জমা দেওয়া হয় someFunction(oldValue,newValue)


2

আমি নিশ্চিত নই, তবে সম্ভবত এই যুক্তি কাজ করবে।

var d = 10;
var prevDate = "";
var x = 0;
var oldVal = "";
var func = function (d) {
    if (x == 0 && d != prevDate && prevDate == "") {
        oldVal = d;
        prevDate = d;
    }
    else if (x == 1 && prevDate != d) {
        oldVal = prevDate;
        prevDate = d;
    }
    console.log(oldVal);
    x = 1;
};
/*
         ============================================
         Try:
         func(2);
         func(3);
         func(4);
*/

2

আপনি এটি করতে পারেন: এইচটিএমএল উপাদানটিতে ওল্ডভ্যালু বৈশিষ্ট্য যুক্ত করুন, ব্যবহারকারী ক্লিক করলে সেট ওলভ্যালু যুক্ত করুন। তারপরে অনুরুপ ইভেন্টটি পুরানো মূল্য ব্যবহার করুন।

<input type="text" id="test" value ="ABS" onchange="onChangeTest(this)" onclick="setoldvalue(this)" oldvalue="">

<script>
function setoldvalue(element){
   element.setAttribute("oldvalue",this.value);
}

function onChangeTest(element){
   element.setAttribute("value",this.getAttribute("oldvalue"));
}
</script>

0

হতে পারে আপনি টেক্সটবক্সের পূর্বের মানটি একটি লুকানো পাঠ্যবক্সে সংরক্ষণ করতে পারেন। তারপরে আপনি লুকানো থেকে প্রথম মান এবং টেক্সটবক্স থেকে নিজের সর্বশেষ মান পেতে পারেন। এর সাথে সম্পর্কিত একটি বিকল্প, আপনার পাঠ্যবক্সের অনফোকাস ইভেন্টে আপনার পাঠ্যবক্সের মান একটি গোপন ক্ষেত্রের জন্য সেট করে এবং অন্বেষণ ইভেন্টে পূর্ববর্তী মানটি পড়বে।


4
তবে, আমাদের যদি কিছু 100+ পাঠ্য বাক্স থাকে তবে এই ক্ষেত্রে আমাদের 100+ লুকানো ভেরিয়েবল থাকা দরকার, সুতরাং পুরানো মানগুলি পাওয়ার জন্য অন্য কোনও উপায় আছে কি?
সিএফউজার

0

সম্ভবত আপনি "অনফোকাস" ইভেন্টের সাহায্যে পুরানো মানটি সংরক্ষণ করার চেষ্টা করতে পারেন এবং পরে এটি "অ্যানচেঞ্জ" ইভেন্টের সাথে নতুন মানের সাথে তুলনা করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.