জিকুয়ারি বা জাভাস্ক্রিপ্ট: অ্যাঙ্কর ট্যাগ হাইপারলিংক ক্লিক করার সময় শিফট কী টিপানো হচ্ছে কিনা তা কীভাবে নির্ধারণ করবেন?


92

আমার একটি অ্যাঙ্কর ট্যাগ রয়েছে যা একটি জাভাস্ক্রিপ্ট ফাংশন বলে।

JQuery সহ বা ছাড়া আমি কীভাবে নির্ধারণ করব লিঙ্কটি ক্লিক করার সময় শিফট কীটি নীচে রয়েছে কিনা?

নিম্নলিখিত কোডটি কার্যকর হয় না কারণ "রিয়েল কী" (শিফট কী নয়) টিপলে কেবল কীপ্রেস বরখাস্ত করা হয়। (আমি আশা করছিলাম যে কেবল শিফট চাবিটি যদি একা চাপানো হয় তবে এটি জ্বলে উঠবে))

var shifted = false;

$(function() {                           
    $(document).keypress(function(e) {
        shifted = e.shiftKey;
        alert('shiftkey='+e.shiftkey);
    });

    $(document).keyup(function(e) {
        shifted = false;
    });
}

...

function myfunction() {
  //shift is always false b/c keypress not fired above
}

4
নিম্নলিখিত shiftkeyshiftKey
কোডটিও

চাপ দেওয়ার সময় হ্যান্ডলারটি কল করা এড়াতে যদি আপনার জানতে হয় তবে shift+clickব্যবহার করুনfilter-altered-clicks
fregante

উত্তর:


100
    $(document).on('keyup keydown', function(e){shifted = e.shiftKey} );

21
এটি আমার জন্য কাজ করেন কিন্তু সব মান শর্টকাটগুলিকে জড়িত করা হয়নি বিঘ্নিত shiftফাংশন আয় থেকে falsereturn trueCrtl + r, ctrl + s, ctrl + p ইত্যাদি অনুমোদনের জন্য আমার স্পষ্টভাবে প্রয়োজন হয়েছিল
জন এইচ

4
সুতরাং পরামর্শটি হ'ল কীপ্রেসের পরিবর্তে কীডাউন ব্যবহার করা উচিত।
rwitzel

আজব, আমি কেবল কীডাউন ইভেন্টগুলি পাই, কোনও কীআপ নেই।
গেরি

@rwitzel কীডাউন এবং কীআপ আপনাকে কীবোর্ডের প্রতিটি কি-তে চালিত হওয়ার সাথে সাথে শিফট কীটির প্রকৃত অবস্থা ট্র্যাক করতে দেয়। কীপ্রেসগুলি সর্বদা নিক্ষেপ করা হয় না যেমন কেবল শিফট কী টিপে গেলে গুলি করা হয় না।
jakubiszon

@ গেরি এটি আপনার পৃষ্ঠায় অন্য কিছু ইভেন্ট হ্যান্ডলার থাকতে পারে যা ইভেন্ট চেইনটি ভেঙে দেয়। প্রথমে একটি ফাঁকা / নতুন পৃষ্ঠা দেখুন (এটিতে যা আপনার সমস্ত স্ক্রিপ্ট অন্তর্ভুক্ত করে না) - এটি ঠিক কাজ করবে।
jakubiszon

74

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

backspace           8
tab                 9
enter               13
shift               16
ctrl                17
alt                 18
pause/break         19
caps lock           20
escape              27
page up             33
page down           34
end                 35
home                36
left arrow          37
up arrow            38
right arrow         39
down arrow          40
insert              45
delete              46
0                   48
1                   49
2                   50
3                   51
4                   52
5                   53
6                   54
7                   55
8                   56
9                   57
a                   65
b                   66
c                   67
d                   68
e                   69
f                   70
g                   71
h                   72
i                   73
j                   74
k                   75
l                   76
m                   77
n                   78
o                   79
p                   80
q                   81
r                   82
s                   83
t                   84
u                   85
v                   86
w                   87
x                   88
y                   89
z                   90
left window key     91
right window key    92
select key          93
numpad 0            96
numpad 1            97
numpad 2            98
numpad 3            99
numpad 4            100
numpad 5            101
numpad 6            102
numpad 7            103
numpad 8            104
numpad 9            105
multiply            106
add                 107
subtract            109
decimal point       110
divide              111
f1                  112
f2                  113
f3                  114
f4                  115
f5                  116
f6                  117
f7                  118
f8                  119
f9                  120
f10                 121
f11                 122
f12                 123
num lock            144
scroll lock         145
semi-colon          186
equal sign          187
comma               188
dash                189
period              190
forward slash       191
grave accent        192
open bracket        219
back slash          220
close braket        221
single quote        222

সমস্ত ব্রাউজারগুলি কী-টিপস ইভেন্টটি ভালভাবে পরিচালনা করে না, সুতরাং কী আপ বা কী ডাউন ইভেন্টটি ব্যবহার করুন:

$(document).keydown(function (e) {
    if (e.keyCode == 16) {
        alert(e.which + " or Shift was pressed");
    }
});

এই উত্তরে পরিমান পরিশ্রমের জন্য আরও 1
ইয়ান ওয়াইজ

4
event.keyপরিবর্তে ব্যবহার করুন! এটি আপনাকে চরটি সরাসরি দেবে, উদাহরণস্বরূপ: "এ", "1", "বাম দিক"
গিবল্ট

এর ভ্যানিলাজেএস সংস্করণে আরও উন্নত:document.addEventListener("keydown", function(e){ console.log(e.which); });
ইভজেনি

26

মাউস ইভেন্টগুলির জন্য, আমি জানি যে ফায়ারফক্সে ইভেন্ট অবজেক্টের কমপক্ষে "shiftKey" বৈশিষ্ট্যটি আপনাকে শিফট কীটি নিচে রয়েছে কিনা তা বলবে। এটি এমএসডিএন-তে নথিভুক্ত করা হয়েছে তবে আমি চিরকালের জন্য এটি চেষ্টা করি নি তাই আমি মনে করি না যে এই সঠিকভাবে কাজ করে কিনা।

সুতরাং আপনি আপনার "ক্লিক" হ্যান্ডলারের ইভেন্ট অবজেক্টে "shiftKey" চেক করতে সক্ষম হওয়া উচিত।


4
প্রকৃতপক্ষে. এটি জাভাস্ক্রিপ্টের প্রথম দিকের দিনগুলিতে ফিরে এসেছে।
ববিনস

23

আমার মতো একই সমস্যা ছিল, একটি 'শিফট + ক্লিক' ক্যাপচার করার চেষ্টা করছিল কিন্তু যেহেতু আমি স্ট্যান্ডার্ড clickহ্যান্ডলারের পরিবর্তে একটি কলব্যাক দিয়ে তৃতীয় পক্ষের নিয়ন্ত্রণ ব্যবহার করছিলাম, তাই ইভেন্ট ইভেন্ট এবং এর সাথে সম্পর্কিত আমার অ্যাক্সেস ছিল না e.shiftKey

আমি শিফট-নেস রেকর্ড করতে মাউস ডাউন ইভেন্টটি পরিচালনা করেছি এবং তারপরে এটি আমার কলব্যাকে পরে ব্যবহার করব।

    var shiftHeld = false;
    $('#control').on('mousedown', function (e) { shiftHeld = e.shiftKey });

এই সমস্যার সমাধানের সন্ধানের জন্য এখানে অন্য কেউ শেষ করার পরে কেবল পোস্ট করা হয়েছে Posted


7

keypressযখন আপনি ক্লিক ঘটনা সমস্ত ব্রাউজার দ্বারা আলোড়ন সৃষ্টি করা হয় না shiftবা ctrl, কিন্তু সৌভাগ্যবশত ঘটনাkeydown

আপনি খুঁজে স্যুইচ তাহলে keypressসঙ্গে keydownআপনি ভাল ভাগ্য থাকতে পারে।


4
ভাল তবে সমস্যাটি হ'ল শিফট কী টিপছে কিনা তা সে নিশ্চিতভাবে জানতে পারবে না । ওহ তবে আমি অনুমান করি যে পতাকাটি যদি "কীআপ" এর জন্যও সেট করা থাকে তবে কী ইভেন্টগুলি দ্বারা "ক্লিক করুন" বন্ধনীয় হয় তা সনাক্ত করা সম্ভব হত।
পয়েন্টি

6

বর্তমানে পরীক্ষা করা কী কোডগুলিকে একটি অ্যারেতে সংরক্ষণ করে যদি কোনও নির্দিষ্ট কী চাপানো হয় তা পরীক্ষা করার জন্য আমি একটি পদ্ধতি ব্যবহার করেছি:

var keysPressed = [],
    shiftCode = 16;

$(document).on("keyup keydown", function(e) {
    switch(e.type) {
        case "keydown" :
            keysPressed.push(e.keyCode);
            break;
        case "keyup" :
            var idx = keysPressed.indexOf(e.keyCode);
            if (idx >= 0)
                keysPressed.splice(idx, 1);
            break;
    }
});

$("a.shifty").on("click", function(e) {
    e.preventDefault();
    console.log("Shift Pressed: " + (isKeyPressed(shiftCode) ? "true" : "false"));
});

function isKeyPressed(code) {
    return keysPressed.indexOf(code) >= 0;
}

এখানে jsfiddle আছে


4
দুর্দান্ত সমাধান তবে এটিতে কী-আপের উপর একটি ছোট্ট ফিক্স দরকার: যখন (আইডিএক্স> = 0) {কীপ্রেসড.স্প্লাইস (আইডিএক্স, 1); idx = avpg.keysPressed.indexOf (e.keyCode); } অন্যথায়, কোনও কিপ্রেসের প্রথম ঘটনাটি সরানো হবে। এটি লক্ষ্য করার জন্য, কয়েক সেকেন্ডের জন্য শিফটটি ধরে রাখুন। অ্যারে শিফট কোডগুলি দিয়ে পূর্ণ হয় তবে কীপআপের মধ্যে কেবলমাত্র একটি সরানো হয়।
pkExec

4

চমৎকার JavaScript লাইব্রেরি KeyboardJS Shift কী সহ মূল প্রক্রিয়া সব ধরনের পরিচালনা করে। এমনকি এটি প্রথমে CTRL + x টিপুন এবং তারপরে একটি হিসাবে কী সংমিশ্রণ নির্দিষ্ট করার অনুমতি দেয়।

KeyboardJS.on('shift', function() { ...handleDown... }, function() { ...handleUp... });

আপনি যদি একটি সাধারণ সংস্করণ চান তবে @tonycoupland এর উত্তরে যান :

var shiftHeld = false;
$('#control').on('mousedown', function (e) { shiftHeld = e.shiftKey });

@ ডাউনভোটার্স: দয়া করে আপনার মন্তব্য কেন
কমিয়ে দিন

3

এটি আমার পক্ষে দুর্দান্ত কাজ করে:

function listenForShiftKey(e){
    var evt = e || window.event;
    if (evt.shiftKey) {
      shiftKeyDown = true;
    } else {
      shiftKeyDown = false;
    }
}

3

মাউসের সাহায্যে ক্লিক করার সময় শিফটকে টিপানো হয় কিনা তা যাচাই করার জন্য ক্লিক ইভেন্ট ইভেন্টটিতে একটি সঠিক সম্পত্তি রয়েছে : শিফটকে (এবং সিটিআরএল এবং ওএলটি এবং মেটা কী জন্যও): https://www.w3schools.com/jsref/event_shiftkey .asp

সুতরাং jQuery ব্যবহার:

$('#anchor').on('click', function (e) {
    if (e.shiftKey) {
        // your code
    }
});

2

thisশ্রোতাদের মধ্যে আপনার সুযোগ রাখার ক্ষমতা আরও একটি মডুলার পদ্ধতির সাথে :

var checkShift = function(fn, self) {
  return function(event) {
    if (event.shiftKey) {
      fn.call(self, event);
    }
    return true;
  };
};

$(document).on('keydown', checkShift(this.enterMode, this));

1

যদি কেউ প্রদত্ত কীটি সনাক্ত করতে চায় এবং "মোডিফায়ারগুলি" (যা তাদের জাভাতে বলা হয়), অর্থাৎ শিফট, আল্ট এবং কন্ট্রোল কীগুলির স্থিতি জানতে হবে, আপনি কী এরকম কিছু করতে পারেন, যা keydownকী এফ 9-তে সাড়া দেয় , তবে কেবলমাত্র যদি বর্তমানে শিফ্ট, আল্ট বা কন্ট্রোল কীগুলি চাপ না দেওয়া হয়।

jqMyDiv.on( 'keydown', function( e ){
    if( ! e.shiftKey && ! e.altKey && ! e.ctrlKey ){
        console.log( e );
        if( e.originalEvent.code === 'F9' ){
          // do something 
        }
    }
});

0
var shiftDown = false;
this.onkeydown = function(evt){
    var evt2 = evt || window.event;
    var keyCode = evt2.keyCode || evt2.which;       
    if(keyCode==16)shiftDown = true;
}
this.onkeyup = function(){
    shiftDown = false;
}

ডেমো

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