jQuery: কীপ্রেস ব্যাকস্পেস আগুন লাগবে না?


186

আমি ভাবছি যে আমি কী ভুল করছি:

$(".s").keypress(function(e) {
   switch (e.keyCode) {
      case 8: // Backspace
      //console.log('backspace');
      case 9: // Tab
      case 13: // Enter
      case 37: // Left
      case 38: // Up
      case 39: // Right
      case 40: // Down
         break;

      default:
         doSearch();
   }
});

আমি চাই doSearch()আমি Backspaceকীটি চাপলে আমার ফাংশনটিও বরখাস্ত হয় । আমি Backspaceক্রোম এবং সাফারিতে চাপলে এই মুহূর্তে কিছুই হয় না ।

কোন ধারনা?


আপনি এই jQuery প্লাগইন কোড. google.com/p/js-hotkeys চেষ্টা করতে পারেন এবং "ব্যাকস্পেস" কী ওরফে ব্যবহার করতে পারেন
জোসে ম্যানুয়েল লুকাস

3
এটি ক্রোমে আগুন দেয় না তবে ফায়ারফক্সে রয়েছে।
vsync

নেক্রোপোস্টিংয়ের জন্য দুঃখিত তবে এটি লক্ষণীয় যে e.keyCode এর চেয়ে যাকে বেশি পছন্দ করা হয়েছে
হেনরি হাওসন

উত্তর:


324

keyupপরিবর্তে ব্যবহার করুন keypress। ব্যবহারকারী যখন কিছু চাপ দেয় তখন এটি সমস্ত কী কোড পায়


37
keyupব্যাকস্পেসের জন্য কেন আগুন লাগবে keypress?
অ্যারন দিগুল্লা

এটা কেস। কীপ ব্যাকস্পেসে আগুন জ্বালিয়ে দেয়, কীপ্রেস -> অদ্ভুত। দুটি কী কী সেমিডি-সি, বা সেন্টিমিডি-ভি, বা সেন্টিমিডি-এ চাপ দেওয়া আছে তা পরীক্ষা করার সুযোগ আছে
ম্যাট

17
এটি আসলে চাবির উপর নির্ভরশীল। আপনি ব্যবহার করতে চান keypressজন্য Enterকী, keydownজন্য Backspaceএবং তাই ঘোষণা; অন্যথায় আপনি কিছু ব্রাউজারগুলিতে আপনার ইভেন্টগুলি বাস্তবে যেমনটি প্রত্যাশা করেন তেমন কার্যকর হয় না, বিশেষত যখন আপনি কীটির জন্য ডিফল্ট আচরণ রোধ করতে চান। আপনি যখন ভুলটি ব্যবহার করেন, তখন যা ঘটে তা হ'ল হয় আপনার ইভেন্টটি একেবারেই ক্যাপচার করা হয়নি (যেমন ব্যাকস্পেসের ক্ষেত্রে) বা আপনি এটিকে আটকাতে পারবেন না; আপনার ইভেন্ট হ্যান্ডলিং কোডটি পাওয়ার আগে এটি ইতিমধ্যে ঘটেছে।
srcspider

5
এই উত্তরটি সঙ্গে সমস্যা যে ব্যবহার করছে keyupকরবে নম্বর প্যাডে বিরতি । আপনি কি এমন কোনও উত্তর জানেন যা পুরো কীবোর্ডের কোনও কী সঠিকভাবে সনাক্ত করতে দেয়?
hughes

6
keydownসমস্ত কীগুলির জন্য আরও ভাল বিকল্প
শিল্পফুলদেব

32

আমি নিজেই এটি পেরিয়ে এসেছি। আমি .onএটি ব্যবহার করেছি তাই এটি কিছুটা আলাদা দেখাচ্ছে তবে আমি এটি করেছি:

 $('#element').on('keypress', function() {
   //code to be executed
 }).on('keydown', function(e) {
   if (e.keyCode==8)
     $('element').trigger('keypress');
 });

এখানে আমার কাজ যুক্ত করা হচ্ছে। আমার ব্যবহারকারীর দ্বারা টাইপ করা ssn মুছতে হবে তাই আমি jQuery এ এটি করেছি

  $(this).bind("keydown", function (event) {
        // Allow: backspace, delete
        if (event.keyCode == 46 || event.keyCode == 8) 
        {
            var tempField = $(this).attr('name');
            var hiddenID = tempField.substr(tempField.indexOf('_') + 1);
            $('#' + hiddenID).val('');
            $(this).val('')
            return;
        }  // Allow: tab, escape, and enter
        else if (event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
        // Allow: Ctrl+A
        (event.keyCode == 65 && event.ctrlKey === true) ||
        // Allow: home, end, left, right
        (event.keyCode >= 35 && event.keyCode <= 39)) {
            // let it happen, don't do anything
            return;
        }
        else 
        {
            // Ensure that it is a number and stop the keypress
            if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) &&       (event.keyCode < 96 || event.keyCode > 105)) 
            {
                event.preventDefault();
            }
        }
    });

1
আপনি ফায়ারফক্সের সাথে কাজ করে যদি আপনি ইভেন্ট.কি কোডের পরিবর্তে ইভেন্ট.কি.কোড api.jquery.com/event.which
বিশপজেড

11

আপনি যদি কেবল নিজের ইনপুট ব্যবহারের পরিবর্তনে ইভেন্টটি চালিত করতে চান:

$('.s').bind('input', function(){
  console.log("search!");
  doSearch();
});

inputকী কোডস পর্যবেক্ষণ করে না। এটিও কাজ করবে না।
মার্ক পাইসাক - ট্রিলন.ও

3

.Keypress () এর jQuery ডকুমেন্টেশন অনুসারে, এটি মুদ্রণযোগ্য অক্ষরগুলি ধরে না, সুতরাং ব্যাকস্পেস কী-পিসে কাজ করবে না, তবে এটি কীডাউন এবং কীআপে ধরা পড়ে:

যখন ব্রাউজারটি কীবোর্ড ইনপুট নিবন্ধন করে তখন কী-চাপড়ির ইভেন্টটি কোনও উপাদানকে পাঠানো হয়। এটি কীডাউন ইভেন্টের অনুরূপ, পরিবর্তক এবং নন-প্রিন্টিং কীগুলি যেমন শিফট, ইস্ক, এবং ট্রিগার কীডাউন ইভেন্টগুলি মুছুন তবে কীপ্রেস ইভেন্টগুলি নয় except প্ল্যাটফর্ম এবং ব্রাউজারের উপর নির্ভর করে দুটি ইভেন্টের মধ্যে অন্যান্য পার্থক্য দেখা দিতে পারে। ( https://api.jquery.com/keypress/ )

কিছু ক্ষেত্রে কীআপটি পছন্দসই নয় বা অন্যান্য অনাকাঙ্ক্ষিত প্রভাব রয়েছে এবং কীডাউন যথেষ্ট, তাই এটি পরিচালনা করার একটি উপায় হ'ল keydownসমস্ত কী-স্ট্রোকগুলি ধরার জন্য ব্যবহার করতে হবে এবং তারপরে একটি সংক্ষিপ্ত বিরতির সময়সীমা নির্ধারণ করুন যাতে কীটি প্রবেশ করা হয়, তারপরে প্রক্রিয়াজাতকরণ করুন তারপর.

jQuery(el).keydown( function() { 
    var that = this; setTimeout( function(){ 
           /** Code that processes backspace, etc. **/ 
     }, 100 );  
 } );
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.