জাভাস্ক্রিপ্টে তীর কী প্রেসগুলি সনাক্ত করা হচ্ছে


457

একটি তীর কী টিপলে আমি কীভাবে সনাক্ত করব? আমি এটি ব্যবহার করতে ব্যবহার করেছি:

function checkKey(e) {
    var event = window.event ? window.event : e;
    console.log(event.keyCode)
}

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

উত্তর:


732

তীর কীগুলি কেবল দ্বারা ট্রিগার করা হয় onkeydown, নয় onkeypress

কীকোডগুলি হ'ল:

  • বাম = 37
  • আপ = 38
  • ডান = 39
  • ডাউন = 40

14
কিছু ব্রাউজার keypressতীর কীগুলির জন্য ইভেন্টগুলি ট্রিগার করে তবে আপনি ঠিক বলেছেন যে keydownসর্বদা তীর কীগুলির জন্য কাজ করে।
টিম ডাউন

4
আপনি যদি% টিপেন, আপনি কী-কোড 37
xorcus

9
@ এক্সরকাস - না, আপনি 53একটি keydownইভেন্ট নিয়ে আসেন । আপনি পেতে 37দিয়ে keypressযা বিভিন্ন জিনিস,
মার্ক কানের

7
কী কী?
1nfiniti

2
@ মিআরক্রাফ্ট - বা শুনুন onkeyupএবং সেখানে ইভেন্টটি বন্ধ করুন। বাস্তবে আপনার জাভা স্ক্রিপ্টের সাথে ইউআই আচরণটি পরিবর্তন করা উচিত নয়।
মার্ক কাহন

225

কী আপ এবং ডাউন কল ফাংশনে। প্রতিটি কী জন্য বিভিন্ন কোড আছে।

document.onkeydown = checkKey;

function checkKey(e) {

    e = e || window.event;

    if (e.keyCode == '38') {
        // up arrow
    }
    else if (e.keyCode == '40') {
        // down arrow
    }
    else if (e.keyCode == '37') {
       // left arrow
    }
    else if (e.keyCode == '39') {
       // right arrow
    }

}

দ্বিতীয় লাইনটি কী করে?
eshellborn

16
পরিষ্কার করতে, 'ই || উইন্ডো.ভেনভের অর্থ হ'ল যদি 'ই' একটি সংজ্ঞায়িত মান হয় তবে এটি '||' এর ফলাফল হবে অভিব্যক্তি। যদি 'ই' সংজ্ঞায়িত না করা হয়, 'উইন্ডো.ভেন্চ' এর ফলে '||' অভিব্যক্তি। সুতরাং এটি মূলত শর্টহ্যান্ড এর জন্য: e = e ? e : window.event; বা:if (typeof(e) === "undefined") { e = window.event; }
মাইকেল ক্যালভিন

17
এটি আইই (পূর্ব আই 9) এর পুরানো সংস্করণগুলিতে এটি কাজ করার জন্য যেখানে ইভেন্টটি হ্যান্ডলার ফাংশনে স্থান দেয়নি।
মার্ক রোডস

12
কী-কোডটি কেবল নোট করার জন্য একটি সংখ্যা এবং === আদর্শভাবে ব্যবহার করা উচিত
অ্যালেক্সারোগার্স

11
@ স্ক্যান বিন্দুটি ছিল যে কী কোড একটি নম্বর এবং এটি চেক করা উচিত keyCode === 32, না keyCode == '32'বা নয় keyCode === '32'
Nenotlep

98

ইভেন্ট.কি === "অ্যারোরাইট" ...

আরও সাম্প্রতিক এবং অনেক ক্লিনার: ব্যবহার event.key। আর যথেচ্ছ নম্বর কোড নেই! আপনি যদি স্থানান্তর করছেন বা আপনার ব্যবহারকারীরা সমস্ত আধুনিক ব্রাউজারে আছেন জানেন তবে এটি ব্যবহার করুন!

node.addEventListener('keydown', function(event) {
    const key = event.key; // "ArrowRight", "ArrowLeft", "ArrowUp", or "ArrowDown"
});

ভার্বোজ হ্যান্ডলিং:

switch (event.key) {
    case "ArrowLeft":
        // Left pressed
        break;
    case "ArrowRight":
        // Right pressed
        break;
    case "ArrowUp":
        // Up pressed
        break;
    case "ArrowDown":
        // Down pressed
        break;
}

আপনি "w", "a", "s", "d"বা অন্য কোনও কী পরীক্ষা করার জন্য এটি সহজেই প্রসারিত করতে পারেন

মজিলা ডক্স

সমর্থিত ব্রাউজারগুলি

পিএস তীরগুলির জন্যevent.code একই


5
আপনাকে ব্যবহার করার জন্য ধন্যবাদ keyএবং না keyCode, এটি অবহেলা করা হয়েছিল।
v010dya

8
এমডিএন থেকে দ্রষ্টব্য: ইন্টারনেট এক্সপ্লোরার, এজ (১ earlier এবং তার আগের) এবং ফায়ারফক্স (৩ earlier এবং তার আগের) "বাম", "ডান", "উপরে", এবং "নিচে" "অ্যারো লেফট", "তীরচিহ্ন", "তীরচিহ্ন" ব্যবহার করে ", এবং" অ্যারোডাউন "।
সাইমন

95

সম্ভবত সবচেয়ে দীর্ঘতম সূত্র:

document.onkeydown = function(e) {
    switch (e.keyCode) {
        case 37:
            alert('left');
            break;
        case 38:
            alert('up');
            break;
        case 39:
            alert('right');
            break;
        case 40:
            alert('down');
            break;
    }
};

ডেমো (ব্যবহারকারী অ্যাঙ্গাস গ্রান্টকে ধন্যবাদ): http://jsfiddle.net/angusgrant/E3tE6/

এটি ক্রস ব্রাউজারে কাজ করা উচিত। এমন কোনও ব্রাউজার রয়েছে যেখানে এটি কাজ করে না সেখানে একটি মন্তব্য করুন।

কী কোডটি পাওয়ার অন্যান্য উপায় আছে (যেমন, পরিবর্তে e.charCode, এবং উইন্ডো.ইভেন্ট ই এর পরিবর্তে) তবে এগুলি প্রয়োজনীয় হওয়া উচিত নয়। আপনি তাদের বেশিরভাগ http://www.asquare.net/javascript/tests/KeyCode.html এ চেষ্টা করতে পারেন । নোট করুন যে ইভেন্ট.কিকোড ফায়ারফক্সে অ্যানকিপ্রেসের সাথে কাজ করে না, তবে এটি অনকিডাউন দিয়ে কাজ করে।


3
আমি সংজ্ঞা সন্ধান করার ছিল বাহুল্যবর্জিত , তারপর আমি (sprightfully) postulated যে tersest একটি অপ্রকৃত সংশ্লেষ ছিল; হায়রে, আমি স্বীকার করছি: আমার একাকীত্ব ছিল নামকরা
ashleedawg

20

প্রিন্টযোগ্য কী যেমন যেমন তীর কীগুলির জন্য keydownনয়, ব্যবহার করুন keypress:

function checkKey(e) {
    e = e || window.event;
    alert(e.keyCode);
}

document.onkeydown = checkKey;

আমি খুঁজে পেয়েছি সেরা জাভাস্ক্রিপ্ট কী ইভেন্ট রেফারেন্স (উদাহরণস্বরূপ, quirksmode বন্ধ প্যান্ট বীট) এখানে: http://unixpapa.com/js/key.html



11

আমি বিশ্বাস করি সবচেয়ে সাম্প্রতিক পদ্ধতিটি হ'ল:

document.addEventListener("keydown", function(event) {
  event.preventDefault();
  const key = event.key; // "ArrowRight", "ArrowLeft", "ArrowUp", or "ArrowDown"
  switch (key) { // change to event.key to key to use the above variable
    case "ArrowLeft":
      // Left pressed
      <do something>
      break;
    case "ArrowRight":
      // Right pressed
      <do something>
      break;
    case "ArrowUp":
      // Up pressed
      <do something>
      break;
    case "ArrowDown":
      // Down pressed
      <do something>
      break;
  }
});

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


9
function checkArrowKeys(e){
    var arrs= ['left', 'up', 'right', 'down'], 
    key= window.event? event.keyCode: e.keyCode;
    if(key && key>36 && key<41) alert(arrs[key-37]);
}
document.onkeydown= checkArrowKeys;

1
arrsফাংশনের বাইরে রাখার কি মূল্য নেই ? এটিকে প্রতিটি কল পুনরায় তৈরি করার দরকার নেই
দুঃখ

8

এখানে একটি বাস্তবায়ন উদাহরণ:

var targetElement = $0 || document.body;

function getArrowKeyDirection (keyCode) {
  return {
    37: 'left',
    39: 'right',
    38: 'up',
    40: 'down'
  }[keyCode];
}

function isArrowKey (keyCode) {
  return !!getArrowKeyDirection(keyCode);
}

targetElement.addEventListener('keydown', function (event) {
  var direction,
      keyCode = event.keyCode;

  if (isArrowKey(keyCode)) {
    direction = getArrowKeyDirection(keyCode);

    console.log(direction);
  }
});

আমি পাচ্ছি $ 0 সংজ্ঞায়িত var targetElement = typeof $0 !== 'undefined' ? $0 : document.body; বা ঠিক নয়: var targetElement = document.body;ঠিক আছে
পাপো

7

আমি এটি কীভাবে করেছি তা এখানে:

var leftKey = 37, upKey = 38, rightKey = 39, downKey = 40;
var keystate;
document.addEventListener("keydown", function (e) {
    keystate[e.keyCode] = true;
});
document.addEventListener("keyup", function (e) {
    delete keystate[e.keyCode];
});

if (keystate[leftKey]) {
//code to be executed when left arrow key is pushed.
}
if (keystate[upKey]) {
//code to be executed when up arrow key is pushed.
}
if (keystate[rightKey]) {
//code to be executed when right arrow key is pushed.
}
if (keystate[downKey]) {
//code to be executed when down arrow key is pushed.
}

5

আমি তাদের jQuery দিয়ে আটকাতে সক্ষম হয়েছি:

$(document).keypress(function (eventObject) {
    alert(eventObject.keyCode);
});

একটি উদাহরণ: http://jsfiddle.net/AjKjU/


4
keypressতীর কী দিয়ে কাজ করবে না। $(document).on('keydown', function() {...})পরিবর্তে আপনাকে ব্যবহার করতে হবে
জুড়িবিয়ান

4

এটি ক্রোম এবং ফায়ারফক্সের ওয়ার্কিং কোড

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>

<script type="text/javascript">

    function leftArrowPressed() {
      alert("leftArrowPressed" );
      window.location = prevUrl  
    }

    function rightArrowPressed() {
      alert("rightArrowPressed" );
      window.location = nextUrl  
    }
    function topArrowPressed() {
      alert("topArrowPressed" );
      window.location = prevUrl  
    }

    function downArrowPressed() {
      alert("downArrowPressed" );
      window.location = nextUrl  
    }

        document.onkeydown = function(evt) {
                        var nextPage = $("#next_page_link")
                        var prevPage = $("#previous_page_link")
                        nextUrl = nextPage.attr("href")
                        prevUrl = prevPage.attr("href")
        evt = evt || window.event;
        switch (evt.keyCode) {
                case 37:
                leftArrowPressed(nextUrl);
                break;

                case 38:
                topArrowPressed(nextUrl);
                break;

                 case 39:
                rightArrowPressed(prevUrl);
                break;

                case 40:
                downArrowPressed(prevUrl);
                break;

        }
    };


</script>
</head>
<body>
<p>
<a id="previous_page_link" href="http://www.latest-tutorial.com">Latest Tutorials</a> 
<a id="next_page_link" href="http://www.zeeshanakhter.com">Zeeshan Akhter</a>
 </p>
</body>
</html>

3

আমি এই পোস্টটি জুড়ে না আসা পর্যন্ত আমি এই উত্তরটি খুঁজছিলাম।

আমার সমস্যার সৌজন্যে বিভিন্ন কীগুলির কীকোড জানতে আমি আরও একটি সমাধান খুঁজে পেয়েছি। আমি আমার সমাধানটি ভাগ করে নিতে চেয়েছিলাম।

কনসোলটিতে মানটি লিখতে / কীওয়ার্ড ইভেন্টটি ব্যবহার করে একই ব্যবহার করে সতর্ক করুন event.keyCode। like-

console.log(event.keyCode) 

// or

alert(event.keyCode)

- রূপম



3

এই গ্রন্থাগারটি দোলা! https://craig.is/killing/mice

Mousetrap.bind('up up down down left right left right b a enter', function() {
    highlight([21, 22, 23]);
});

যদিও সেই পৃষ্ঠাতে কোডটি হাইলাইট করার জন্য আপনাকে ক্রমটি কিছুটা দ্রুত চাপতে হবে।


2

উত্তর পুনরায় যে আপনি প্রয়োজন keydownনা keypress

ধরে নিলে আপনি কীটি টিপানোর সময় অবিচ্ছিন্নভাবে কিছু সরিয়ে নিতে চান, আমি দেখতে পেয়েছি যে keydownঅপেরা বাদে সমস্ত ব্রাউজারের জন্য কাজ করে। অপেরার জন্য, keydownকেবলমাত্র প্রথম প্রেসে ট্রিগার হয়। অপেরা ব্যবহার সমন্বিত করতে:

document.onkeydown = checkKey;
document.onkeypress = checkKey;
function checkKey(e)
{ etc etc

1

আপনি যদি jquery ব্যবহার করেন তবে আপনি এটির মতোও করতে পারেন,

 $(document).on("keydown", '.class_name', function (event) {
    if (event.keyCode == 37) {
        console.log('left arrow pressed');
    }
    if (event.keyCode == 38) {
        console.log('up arrow pressed');
    }
    if (event.keyCode == 39) {
        console.log('right arrow pressed');
    }
    if (event.keyCode == 40) {
        console.log('down arrow pressed');
    }
 });

1

তীর কীগুলি কীআপে ট্রিগার করা হয়

$(document).on("keyup", "body", function(e) {
 if (e.keyCode == 38) {
    // up arrow
    console.log("up arrow")
  }
  if (e.keyCode == 40) {
      // down arrow
      console.log("down arrow")
  }
  if (e.keyCode == 37) {
    // left arrow
    console.log("lefy arrow")
  }
  if (e.keyCode == 39) {
    // right arrow
    console.log("right arrow")
  }
})

অনকিডাউন সিটিআরএল, ওয়েল, শিটের অনুমতি দেয়

অনকিআপ ট্যাব, উপরে তীর, ডাউন তীর, বাম তীর, নীচে তীরগুলি অনুমতি দেয়


0

মূল কোডের নিয়ন্ত্রণ %=37এবং &=38... এবং শুধুমাত্র নির্দেশক তীরচিহ্নগুলি বাম = 37 আপ = 38

function IsArrows (e) {
   return ( !evt.shiftKey && (e.keyCode >= 37 && e.keyCode <= 40)); 
}

0

আপনি যদি তীর কী টিপুনগুলি সনাক্ত করতে চান তবে জাভাস্ক্রিপ্টে নির্দিষ্ট প্রয়োজন নেই

function checkKey(e) {
   if (e.keyCode !== 38 || e.keyCode !== 40 || e.keyCode !== 37 || e.keyCode !== 39){
    // do something
   };
}

0

সঙ্গে কী এবং ES6।

এটি আপনাকে সুইচ ব্যবহার না করে প্রতিটি তীর কী জন্য পৃথক ফাংশন দেয় এবং চালু থাকা নামপ্যাডে 2,4,6,8 কীগুলির সাথেও কাজ NumLockকরে।

const element = document.querySelector("textarea"),
  ArrowRight = k => {
    console.log(k);
  },
  ArrowLeft = k => {
    console.log(k);
  },
  ArrowUp = k => {
    console.log(k);
  },
  ArrowDown = k => {
    console.log(k);
  },
  handler = {
    ArrowRight,
    ArrowLeft,
    ArrowUp,
    ArrowDown
  };

element.addEventListener("keydown", e => {
  const k = e.key;

  if (handler.hasOwnProperty(k)) {
    handler[k](k);
  }
});
<p>Click the textarea then try the arrows</p>
<textarea></textarea>

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