কীভাবে আমি কীওয়ারি পেতে পারি? ওয়াল () কীপ্রেস ইভেন্টের পরে?


102

আমি পেয়েছি:

$(someTextInputField).keypress(function() {
  alert($(this).val());
});

এখন সতর্কতা সর্বদা কিপ্রেসের আগে মানটি ফেরত দেয় (যেমন ক্ষেত্রটি খালি থাকে, আমি 'a' টাইপ করি এবং সতর্কতা আমাকে দেয় '' তারপরে আমি 'বি' টাইপ করি এবং সতর্কতা আমাকে 'একটি' দেয় ...)। তবে আমি কীটিপ্রেসের পরে মানটি চাই - আমি কীভাবে এটি করতে পারি?

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


পাঠ্য মুছে ফেলা হলে বোতামটি আবার নিষ্ক্রিয় হওয়া উচিত? যদি তা হয় তবে আপনাকে সম্ভবত কিপ্রেসের সাথে লেগে থাকতে হবে।
ব্রিলিয়ান্ড

উত্তর:


152

এতে পরিবর্তন keypressকরুন keyup:

$(someTextInputField).on("keyup", function() {
  alert($(this).val());
});

keypressচাবিটি নীচে keyupচাপলে চালিত হয়, কীটি প্রকাশিত হলে তা বহিস্কার করা হয়।


@ ব্রিলিয়ান্ড আপনি ঠিক বলেছেন আমি এটির জন্য একটি কার্যনির্বাহ তৈরি করেছি, এটি নীচে পোস্ট করা হয়েছে।
ডেভিড অলিভারস

7
আপনি আইফোন / অ্যান্ড্রয়েড ডিভাইসে কীভাবে এটি সম্পাদন করেন? তারা কীআপ ফাংশন সমর্থন করে না।
মেরিজন ডেন হাউটিং

4
কিপ্রেস সংজ্ঞা ঠিক সঠিক নয়। এটি কীডাউন সংজ্ঞা। quirksmode.org/dom/events/keys.html
20:10 এ

59

অবাক করে দিয়ে কেউ জেএস "ইনপুট" ইভেন্টের উল্লেখ করেনি:

$(someTextInputField).on('input', function() {
  alert($(this).val());
});

প্রস্তাবিত

https://developer.mozilla.org/en-US/docs/Web/Events/input


8
বাহ, এটি বেশ কয়েকটি উত্তরবিহীন / খারাপ উত্তর দেওয়া SO প্রশ্নের উত্তর।
বেন র্যাকিকোট

4
এটি যখন আপনার ইনপুট ক্ষেত্রে তীর কী, শিফট ইত্যাদি টিপুন উপেক্ষা করতে হবে তখন তা দুর্দান্ত।
হোভাদো

4
caniuse.com/#search=input তুলনামূলকভাবে ভাল ব্রাউজার সমর্থন। প্রতিটি কীআপ শোনার চেয়ে আরও ভাল উত্তর।
জেমস হগ

4
এটা আমার দিন বাঁচায়! ধন্যবাদ. আমি নিম্নলিখিত কোড ব্যবহার করেছি: $ ('। সাবজেক্ট_মার্ক')। অন ("ইনপুট", ফাংশন () {var $ থ = $ (এটি); $ থেভাল (। থ.ভাল ()) প্রতিস্থাপন (/ [^ ০-৯] / জি, ফাংশন (স্ট্র) {রিটার্ন '';}));
আরশো


5

বিকল্পভাবে, আপনি 0 টাইমআউট সহ কীডাউন ইভেন্টটি ব্যবহার করতে পারেন।

এইভাবে, পরিবর্তনগুলি তাত্ক্ষণিকভাবে প্রয়োগ করা হবে, ব্যবহারকারী কীটি ধরে রাখা বন্ধ করলে প্রয়োগ করা হবে না।

$(someTextInputField).on("keydown", function() {
  setTimeout(function($elem){
    alert($elem.val());
  }, 0, $(this));
});

ব্যাকস্পেস ধরে রাখার ক্ষেত্রে এটি এখনও অদ্ভুত আচরণ করবে ... সম্ভবত 0 টাইমআউট সহ কিপ্রেস?
ব্রিলিয়ান্ড

আহ, কিছু মনে করবেন না, পাঠ্য ক্ষেত্রটি সাফ হয়ে গেলে কি হবে তা ওপি নির্দিষ্ট করে না।
ব্রিল্যান্ড

5

এরকম কিছু চেষ্টা করুন:

$('#someField').keypress(function() {
  setTimeout(function() {
    if ($('#someField').val().length > 0)
      $('#theButton').attr('disabled', false);
  }, 1);
});

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

সম্পাদনা করুন - বা আপনি প্রত্যেকের মতই "কীআপ" ব্যবহার করতে পারেন, যদিও এর শব্দার্থবিজ্ঞান আলাদা।


এটা বেনিগ স্মার্ট বিষয় নয় । কীআপ ইভেন্টটি একই ফলাফল দেয় না। আপনি কীপ সহ শিফট, সিটিআরএল ইত্যাদির জন্য পৃথক ইভেন্ট পান - আপনি যদি শিফট বা সিটিআরএল কীগুলির স্থিতি পরীক্ষা করতে চান তবে কী ইভেন্টগুলির একাধিক মূল ইভেন্টের পরিবর্তে প্রকৃত চরিত্রটি টাইপ করা (যেমন একটি অ্যাম্পারস্যান্ড) পেতে চান if যাবার উপায়
রিপসাইড

4
ডান; এটাই আমি "এটি শব্দার্থবিজ্ঞানের চেয়ে আলাদা" বলতে চাইছিলাম।
পয়েন্টি

4

আপনি onchangeকোনও মূল ইভেন্টগুলি ব্যবহার না করে ইভেন্ট হ্যান্ডলারটি আপ করতে চাইতে পারেন ।

$(someTextInputField).change(function() {
    alert($(this).val());
});

ব্যবহার Edit > Pasteবা রাইট-ক্লিক করুন তারপরে পেস্ট করা কোনও পরিবর্তন ইভেন্টকে আগুন ধরিয়ে দেবে, তবে কোনও মূল ইভেন্ট নয়। নোট করুন কিছু ব্রাউজার কোনও পেস্টে একটি মূল ইভেন্ট অনুকরণ করতে পারে (যদিও আমি এর কোনও কিছুই জানি না) তবে আপনি সেই আচরণের উপর নির্ভর করতে পারবেন না ।

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