জাভাস্ক্রিপ্ট পরিবর্তন ইভেন্ট ইনপুট উপাদান শুধুমাত্র ফোকাস হারাতে আগুন


84

আমার একটি ইনপুট উপাদান রয়েছে এবং আমি বিষয়বস্তুর দৈর্ঘ্য পরীক্ষা করে চালিয়ে যেতে চাই এবং যখনই দৈর্ঘ্য একটি নির্দিষ্ট আকারের সমান হয়, আমি জমা বোতামটি সক্ষম করতে চাই, তবে জাভাস্ক্রিপ্টের উত্সাহিত ইভেন্টটিকে ইভেন্ট হিসাবে আমি একটি সমস্যার মুখোমুখি হয়েছি am কেবল তখনই আগুন লাগে যখন ইনপুট উপাদানটি সুযোগের বাইরে চলে যায় এবং যখন বিষয়বস্তু পরিবর্তন হয় না।

<input type="text" id="name" onchange="checkLength(this.value)" />

---- বিনিময়ে নামের বিষয়বস্তু পরিবর্তন করে না, তবে নাম ফোকাসের বাইরে চলে গেলে কেবল আগুন লাগে।

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

আমি এমন কিছু চাই যা ক্ষেত্রের সামগ্রীগুলি কীবোর্ডের মাধ্যমে বা মাউস দ্বারা পরিবর্তিত হয় ... কোনও ধারণা?


আপনি ব্যবহার করতে পারেন onkeyupএবং onchange?
জেমস আলার্ডাইস

4
আমার কাছে একমাত্র সমস্যাটি হ'ল ব্রাউজারের অটোমোપ્লেটার নির্বাচন এই ইভেন্টগুলির কোনও কারণ ঘটবে না।
শচীন মিডহা

এটি কোন ধরণের ইনপুট ক্ষেত্র?
পাওয়ারটাক

ওহ ... আমি এটি নমুনা কোডে যুক্ত করতে ভুলে গেছি, এটি একটি পাঠ্য ক্ষেত্র।
শচীন মিডহা

4
আমি ভেবেছিলাম এটি খুব সাধারণ বিষয় হয়ে উঠত এবং প্রচুর লোকেরা এর মুখোমুখি হত, তবে এখন এটি অন্যভাবে দেখা যাচ্ছে ... :)
শচীন মিডহা

উত্তর:


120
(function () {
    var oldVal;

    $('#name').on('change textInput input', function () {
        var val = this.value;
        if (val !== oldVal) {
            oldVal = val;
            checkLength(val);
        }
    });
}());

এই ফেলবো change, কি-স্ট্রোক paste, textInput, input(যখন উপলব্ধ)। এবং প্রয়োজনের চেয়ে বেশি আগুন নয়।

http://jsfiddle.net/katspaugh/xqeDj/


তথ্যসূত্র:

textInput- একটি ডাব্লু 3 সি ডোম স্তর 3 ইভেন্টের ধরণ। http://www.w3.org/TR/DOM-Level-3-Events/#events-textevents

যখন এক বা একাধিক অক্ষর প্রবেশ করানো হয়েছে তখন কোনও ব্যবহারকারী এজেন্টকে অবশ্যই এই ইভেন্টটি প্রেরণ করতে হবে। এই অক্ষরগুলি বিভিন্ন উত্স থেকে উদ্ভূত হতে পারে, উদাহরণস্বরূপ, কোনও কী কীবোর্ড ডিভাইসে চাপলে বা ছেড়ে দেওয়া হয়, ইনপুট পদ্ধতি সম্পাদকের প্রসেসিং থেকে বা ভয়েস কমান্ডের ফলে দেখা যায় characters যেখানে একটি "পেস্ট" অপারেশন অক্ষরের একটি সাধারণ ক্রম উত্পন্ন করে, যেমন কোনও কাঠামো বা শৈলীর তথ্য ছাড়াই একটি পাঠ্য উত্তরণ, এই ইভেন্টের ধরণটিও উত্পন্ন করা উচিত।

input- একটি HTML5 ইভেন্টের ধরণ।

যখন ব্যবহারকারী মান পরিবর্তন করে তখন নিয়ন্ত্রণে ফায়ার করা হয়

ফায়ারফক্স, ক্রোম, আইই 9 এবং অন্যান্য আধুনিক ব্রাউজারগুলি এটি সমর্থন করে।

এই ইভেন্টটি পরিবর্তনের পরে অবিলম্বে ঘটেছিল, অন্বেষণ ইভেন্টের মতো নয় যা উপাদান ফোকাস হারিয়ে ফেললে ঘটে।


4
এটি কোনও কার্যক্ষম নয় ... আপনি কি আপনার কোডটি আপনার শেষে পরীক্ষা করেছেন ?? এটি একটি অটোমোপ্লেটার থেকে বাছাইয়ের কাজ করছে ...?
শচীন মিডহা

আমি textInputক্রোম 15 এ চেক করেছি এবং এটি কাজ করে। আমি inputIE9 এ ইভেন্টটি পরীক্ষা করেছিলাম এবং এটি খুব কার্যকর হয়। ফায়ারফক্স সমর্থন করা উচিত DOMAttrModified, কিন্তু আমার এটি ইনস্টল করা নেই। এই দুটি ইভেন্টই আপনি আশা করতে পারেন সেরা, যেহেতু এগুলি যে কোনও ধরণের পাঠ্য ইনপুটটিতে আগুন দেয়।
কেটসফোগ

4
দুর্দান্ত সমাধান .... ইনপুট আমার জন্য আশীর্বাদের মতো কাজ করেছে ... ইনপুট ব্যতীত আর কিছুই প্রয়োজন নেই, যা নিজেই যথেষ্ট কাজ করে। এটি ff4-তে কাজ করে, তবে 3.x এ হয় না, এবং আমার ডেস্কটপে আমার কাছে 3.6 ছিল এবং এটি কখনও কাজ করে না ...
শচীন মিডহা

4
জিনিসগুলি আপডেট রাখার খাতিরে, বর্তমানে এই সমাধানটি এফএফ 22-এ একক ইনপুট পরিবর্তনে একাধিকবার নিক্ষেপ করেছে, আপনাকে কীপ্রেস বা টেক্সটইনপুট ইভেন্টগুলি ব্যবহার করার দরকার নেই, ইনপুট এবং সম্পত্তি বিনিময় যথেষ্ট হবে
সাইবার-রক্ষী

4
আমি যে খুঁজে পাওয়া যায় নি change, keyupএবং inputIE9 এবং Firefox (36.0.4) আবরণ সেরা মিশ্রণটি ছিল। keypressঘটনা IE9 কাজ বলে মনে হচ্ছে না, কারণ এটা মুছে দিন এবং ব্যাকস্পেস এবং ভালো জিনিস ক্যাপচার করা হয়নি inputকীবোর্ড ও প্রাসঙ্গিক মেনু সঙ্গে পেস্ট ঘটনা কভার।
টিএলএস

9

ক্যাটস্পোর উত্তরের প্রতিরোধ হিসাবে, এখানে একটি CSS ক্লাস ব্যবহার করে একাধিক উপাদানগুলির জন্য এটি করার একটি উপায়।

   $('.myclass').each(function(){
        $(this).attr('oldval',$(this).val());
   });

   $('.myclass').on('change keypress paste focus textInput input',function(){
       var val = $(this).val();
       if(val != $(this).attr('oldval') ){
           $(this).attr('oldval',val); 
           checkLength($(this).val());
        }
    });

4

এটি খুঁজে পেতে আমার 30 মিনিট সময় লেগেছে, তবে এটি 2019 সালের জুনে কাজ করছে।

<input type="text" id="myInput" oninput="myFunction()">

এবং আপনি যদি কোনও ইভেন্ট শ্রোতার সাথে js তে প্রোগ্রামগত যুক্ত করতে চান

inputElement.addEventListener("input", event => {})

3

এটি jQuery উপায়ে করুন:

<input type="text" id="name" name="name"/>


$('#name').keyup(function() {
  alert('Content length has changed to: '+$(this).val().length);
});

4
ক্ষেত্রটি ফোকাস হ'ল এটি কেবল তখনই বরখাস্ত করা হবে।
ফেলিক্স ক্লিং

@ ফেলিক্স ক্লিং, সত্য, এটিকে কী-আপ ();) এ পরিবর্তন করেছেন
পাওয়ারটাক

আবার কি-আপের ক্ষেত্রেও একই সমস্যা ... আমি এটি ব্যবহার করেছি এবং এতে আমার সমস্যা ছিল had আমার সম্পূর্ণ প্রশ্ন পড়ুন।
শচীন মিডহা

0

আপনি অনকিআপ ব্যবহার করতে পারেন

<input id="name" onkeyup="checkLength(this.value)" />

আমি অনকিআপ ব্যবহার করেছি ... তবে আমার সমস্যাটি হ'ল যখন ব্যবহারকারী ব্রাউজারের অটোমোপ্লেটার থেকে নির্বাচন করেন, তখন এই ইভেন্টটি ট্রিগার হয় না ... আমি ইতিমধ্যে আমার প্রশ্নে এটি
যেভাবে

0

আপনি প্রতিটি সম্ভাবনা ধরতে চাইলে আপনাকে onkeyupএবং onclick(বা onmouseup) এর সংমিশ্রণটি ব্যবহার করতে হবে ।

<input id="name" onkeyup="checkLength(this.value)" onmouseup="checkLength(this.value)" />

চমৎকার চেষ্টা করুন, তবে এখানে সমস্যাটি হ'ল আমি ইনপুট উপাদানটিতে নয় তবে অটো-
পূর্ণকারী উপর মাউস টিপছি

কেবলমাত্র অন্য একটি জিনিস যা আমি ভাবতে পারি, এবং এটি বাজে দুষ্ট, setTimeoutসেই ক্ষেত্রটির মান এবং পর্যায়ক্রমে পরীক্ষা করা ... আপনি ঠিক কী করতে চান?
ডেভর্যান্ডম

এটি খুব বাজে। ...: ডি এটি কোনও পাসওয়ার্ড শক্তি সূচক যা কিছু করে তার অনুরূপ, এটি আপনাকে প্রবেশের সময় পাসওয়ার্ডের শক্তি বলে। আমি প্রবেশ করা স্ট্রিং 10 এর দৈর্ঘ্যের কেবল তখনই একটি বোতাম সক্ষম করতে চাই অন্যথায় এটি অক্ষম রাখুন। আমি আশা করি আপনি এটি পেয়েছেন ...
শচীন মিডহা

0

একই সমস্যার জন্য আমি বিকাশের জন্য আরও একটি সমাধান এখানে দিই। তবে আমি অনেক ইনপুট বাক্স ব্যবহার করি তাই আমি উপাদানগুলির নিজস্ব নির্ধারিত বৈশিষ্ট্য হিসাবে পুরানো মান রাখি: "ডেটা-মান"। JQuery ব্যবহার করে এটি পরিচালনা করা এত সহজ।

        $(document).delegate('.filterBox', 'keyup', { self: this }, function (e) {
            var self = e.data.self;

            if (e.keyCode == 13) {
                e.preventDefault();
                $(this).attr('data-value', $(this).val());
                self.filterBy(this, true)
            }
            else if (e.keyCode == 27) {
                $(this).val('');
                $(this).attr('data-value', '');
                self.filterBy(this, true)
            }
            else {
                if ($(this).attr('data-value') != $(this).val()) {
                    $(this).attr('data-value', $(this).val());
                    self.filterBy(this);
                }
            }
        });

এখানে, আমি 5-6 ইনপুট বাক্সগুলিতে ক্লাসের 'ফিল্টারবক্স' ব্যবহার করেছি, আমি যদি ফিল্টারবাই পদ্ধতি চালিত করি তবেই ডেটা-মান তার নিজস্ব মানের থেকে আলাদা হয়।

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