কী কী প্রেসের ইভেন্টগুলি প্রোগ্রামালিকভাবে অনুকরণ করা সম্ভব?


380

কী জাভাস্ক্রিপ্টে প্রোগ্রামিং মূল কী ইভেন্টগুলি অনুকরণ করা সম্ভব?


2
আপনি 'অনুকরণ' স্পষ্ট করতে পারেন? আপনার ওয়েবসাইটটি পরীক্ষা করা কি আপনার লক্ষ্য বা কোনও প্রদত্ত লিঙ্কটির অনক্লিক, অনময়েডাউন, ইত্যাদি কার্যকারিতা কার্যকর করা?
পাওলো

উত্তর:


180

একটি অ-জিকুরি সংস্করণ যা ওয়েবকিট এবং গেকো উভয় ক্ষেত্রেই কাজ করে:

var keyboardEvent = document.createEvent("KeyboardEvent");
var initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? "initKeyboardEvent" : "initKeyEvent";

keyboardEvent[initMethod](
  "keydown", // event type: keydown, keyup, keypress
  true,      // bubbles
  true,      // cancelable
  window,    // view: should be window
  false,     // ctrlKey
  false,     // altKey
  false,     // shiftKey
  false,     // metaKey
  40,        // keyCode: unsigned long - the virtual key code, else 0
  0          // charCode: unsigned long - the Unicode character associated with the depressed key, else 0
);
document.dispatchEvent(keyboardEvent);

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

4
কীবোর্ড ইভেন্ট প্রেরণের সাথে ক্রোমিয়ামে একটি বাগ রয়েছে Turn আরও তথ্যের জন্য এই থ্রেডটি দেখুন: stackoverflow.com/questions/10455626/…
ফিলিপ নুজনি

26
keyCodeসর্বদা 0 হয় এবং আমি এটি পরিবর্তন করতে পারি না।
আতা ইরাভানী

9
দেখা যাচ্ছে যে ক্রোমিয়ামে একটি বাগ রয়েছে যা ব্যবহারের সময় event.whichসর্বদা তা 0হওয়ার কারণ হয়ে থাকে document.createEvent("KeyboardEvent")। @ ওয়েলফ্ট আমার পক্ষে কাজ করা বিশদগুলি এবং একটি কর্মপরিকল্পনা ভাগ করেছে, অন্য মন্তব্যে এই মন্তব্যে । মূলত, আপনার document.createEvent('Event')জেনেরিক ইভেন্ট তৈরি করতে এবং তারপরে টাইপটি সেট করে কী এর চারকোডের সমান সম্পত্তি keydownদিতে হবে keyCode
এ-ডিডি

8
দেখে মনে হচ্ছে এই বৈশিষ্ট্যটি এখনই মুছে ফেলা হয়েছে। যদিও এমডিএন এটিকে বেশ কিছু সময়ের জন্য অবনতি হিসাবে বিবেচনা করেছে।
ট্যাকটিকাস

72

আপনি jQuery 1.3.1 ব্যবহার করতে ঠিক থাকলে:

function simulateKeyPress(character) {
  jQuery.event.trigger({ type : 'keypress', which : character.charCodeAt(0) });
}

$(function() {
  $('body').keypress(function(e) {
    alert(e.which);
  });

  simulateKeyPress("e");
});

হাই আমি যা বলতে চাইছিলাম তা হল: 1. একটি মূল ইভেন্ট নিবন্ধ করুন (চিঠিটি কিছু জেএস কার্যকর করে) 2. অন্য পদ্ধতি থেকে আমি প্রগতিগতভাবে চিঠিটি ই চাপতে চাইছি
ট্যান

9
দুঃখিত, এটি ক্রোমে সঠিকভাবে কাজ করে না। jQuery ইভেন্ট তৈরি করে তবে গুরুত্বপূর্ণ বৈশিষ্ট্য ছাড়াই - যা, চারকোড, কী কোড ode
হামকজু

4
@ ট্যান এটি সম্ভব নয়। এর পিছনে যুক্তির জন্য আমার উত্তরটি দেখুন।
লরেঞ্জ লো Sauer


51

কি আপনি কি করতে পারেন প্রোগ্রামেটিক্যালি আরম্ভ হয় keyevent শ্রোতাকে গুলিতে keyevents । এটি স্যান্ডবক্সযুক্ত সুরক্ষা-দৃষ্টিকোণ থেকে অনুমতি দেওয়া অর্থবোধ করে। এই ক্ষমতাটি ব্যবহার করে, আপনি তারপরে একটি সাধারণ পর্যবেক্ষক-প্যাটার্ন প্রয়োগ করতে পারেন । আপনি এই পদ্ধতিটিকে "সিমুলেটিং" বলতে পারেন।

নীচে jQuery এর সাথে ডাব্লু 3 সি ডোম স্ট্যান্ডার্ডে এটি কীভাবে সম্পাদন করা যায় তার একটি উদাহরণ রয়েছে:

function triggerClick() {
  var event = new MouseEvent('click', {
    'view': window,
    'bubbles': true,
    'cancelable': true
  });
  var cb = document.querySelector('input[type=submit][name=btnK]'); 
  var canceled = !cb.dispatchEvent(event);
  if (canceled) {
    // preventDefault was called and the event cancelled
  } else {
    // insert your event-logic here...
  }
}

এই উদাহরণটি এটিকে রূপান্তরিত হয়েছে: https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events

JQuery এ:

jQuery('input[type=submit][name=btnK]')
  .trigger({
    type: 'keypress',
    which: character.charCodeAt(0 /*the key to trigger*/)      
   });

তবে সাম্প্রতিককালে, ব্রাউজার-স্যান্ডবক্স রেখে প্রকৃতপক্ষে কী-ইনভেন্টগুলি ট্রিগার করার কোনও [DOM] উপায় নেই। এবং সমস্ত বড় ব্রাউজার বিক্রেতারা সেই সুরক্ষা ধারণাটি মেনে চলবে।

অ্যাডোব ফ্ল্যাশের মতো প্লাগইনগুলির জন্য - যা এনপিএপিআই- এর ভিত্তিতে রয়েছে এবং স্যান্ডবক্সকে বাইপাস করার অনুমতি দেয়: এগুলি ফ্যাসিং -আউট ; ফায়ারফক্স

বিস্তারিত ব্যাখ্যা:

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

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

প্রোগ্রামযুক্তভাবে দূরবর্তী সামগ্রী অ্যাক্সেস করতে সিওআরএস অপ্ট-ইন করার ক্ষেত্রে একই ধরণের সুরক্ষা মানসিকতা প্রয়োগ করা হয় ।

উত্তরটি হ'ল:
স্বাভাবিক পরিস্থিতিতে স্যান্ডবক্সযুক্ত ব্রাউজার পরিবেশে প্রোগ্রামগতভাবে ইনপুট কীগুলি ট্রিগার করার কোনও উপায় নেই

বটমলাইন: আমি বলছি না যে ভবিষ্যতে এটি বিশেষায়িত ব্রাউজারের মোড এবং / অথবা গেমিংয়ের শেষ লক্ষ্য বা একই জাতীয় ব্যবহারকারীর অভিজ্ঞতার দিকে বিশেষাধিকারের অধীনে সম্ভব হবে না। তবে এই ধরণের মোডে প্রবেশের আগে, ব্যবহারকারীকে ফুলস্ক্রিন এপিআই মডেলের অনুরূপ অনুমতি এবং ঝুঁকিগুলির জন্য জিজ্ঞাসা করা হবে ।

দরকারী: কী কোডসের প্রসঙ্গে, এই সরঞ্জামটি এবং কীকোড ম্যাপিং কার্যকর হবে।

প্রকাশ: উত্তরটি এখানে উত্তরের ভিত্তিতে তৈরি করা হয়েছে


সুতরাং জাভাস্ক্রিপ্ট কিবোর্ড এভেন্ট এপিআই ( বিকাশকারী.মোজিলা.আর.ইন.ইউএস / ডকস / ওয়েবে / এপিআই / কী বোর্ডবোর্ড) আপনি কী ইভেন্টগুলি অনুকরণ করতে পারেন, উদাহরণস্বরূপ বলুন যে একটি কী চাপানো হয়েছে তবে কী প্রেসের প্রভাবটি পাওয়া সম্ভব নয় , 'ক', 'বি', 'সি' অক্ষর লেখার মতো? যদি এটি সম্ভব হয় তবে এই বেসিক অক্ষরগুলি রক্ষা করা কোনও সুরক্ষা সমস্যা নয় তবে আমি বুঝতে পারি যে "F12" এর মতো একটি বিশেষ কী বা "Alt + F4" এর মতো সংমিশ্রণ নিষিদ্ধ করা উচিত।
30:38

1
আমি যখন ক্রোমে আপনার জিক্যুরি চালাই তখন আমি যা পাই তা: আনকচড রেফারেন্স এরিয়ার: চরিত্রটি সংজ্ঞায়িত করা হয়নি
জেডেন লসন

29

আপনি এই জাতীয় উপাদানের মতো কীবোর্ড ইভেন্টগুলি প্রেরণ করতে পারেন

element.dispatchEvent(new KeyboardEvent('keypress',{'key':'a'}));

12
আমি মনে করি যে উত্তরটিতে জেএস ইভেন্টে প্রেরণ করা ইনপুট সামগ্রী আপডেট করে না এমন সত্যটি উল্লেখ করা উচিত।
কিরিল রেজজনিকভ

5
সর্বশেষতম ফায়ারফক্স আধুনিক নয়?
Emix

এর পরিবর্তে -> বিকাশকারী.মোজিলা.আর.ইন.ইউএসkeypresskeydown
ডকস

এটি আমার প্রয়োজন মতো ক্রোম এম্বেডের সাথে পুরোপুরি কাজ করে।
পাওলো ফ্রান্সিয়া

25

আপনি ব্যবহার করতে পারেন dispatchEvent():

function simulateKeyPress() {
  var evt = document.createEvent("KeyboardEvent");
  evt.initKeyboardEvent("keypress", true, true, window,
                    0, 0, 0, 0,
                    0, "e".charCodeAt(0))
  var body = document.body;
  var canceled = !body.dispatchEvent(evt);
  if(canceled) {
    // A handler called preventDefault
    alert("canceled");
  } else {
    // None of the handlers called preventDefault
    alert("not canceled");
  }
}

আমি এটি পরীক্ষা করিনি, তবে এটি ডিসপ্যাচএভেন্ট () এর ডকুমেন্টেশনের কোড থেকে অভিযোজিত । আপনি সম্ভবত এটির মাধ্যমে পড়তে চাইবেন এবং ক্রিয়েভেন্ট () এবং initKeyEvent () এর জন্যও ডক্স।


15
দ্রষ্টব্য: এটি কেবল গেকো ব্রাউজার দ্বারা সমর্থিত।
lhunath

3
গেকো এবং অন্যান্য ব্রাউজার কিনা ব্যবহার করার জন্য সহমত initKeyEventবা initKeyboardEvent()। উভয়ই কীবোর্ড ইভেন্ট () নির্মাণকারী ব্যবহারের পক্ষে স্বীকৃত dep
jkmartindale

21

আপনি কীবোর্ড ইভেন্টগুলি তৈরি এবং প্রেরণ করতে পারেন এবং এগুলি যথাযথ নিবন্ধিত ইভেন্ট হ্যান্ডলারগুলিকে ট্রিগার করবে তবে উদাহরণস্বরূপ ইনপুট উপাদানটিতে প্রেরণ করা থাকলে তারা কোনও পাঠ্য উত্পাদন করবে না

পাঠ্য ইনপুট সম্পূর্ণরূপে অনুকরণ করতে আপনার কীবোর্ড ইভেন্টগুলির ক্রম উত্পাদন করতে হবে এবং স্পষ্টভাবে ইনপুট উপাদানটির পাঠ্য সেট করতে হবে set ইভেন্টগুলির ক্রম আপনি কতটা পুঙ্খানুপুঙ্খভাবে পাঠ্য ইনপুট অনুকরণ করতে চান তার উপর নির্ভর করে।

সবচেয়ে সহজ ফর্মটি হ'ল:

$('input').val('123');
$('input').change();

15

কিছু ক্ষেত্রে keypressইভেন্টে প্রয়োজনীয় ফান্টিশালিটি সরবরাহ করতে পারে না। মজিলা ডক্স থেকে আমরা দেখতে পাচ্ছি যে বৈশিষ্ট্যটি হ্রাস করা হয়েছে:

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

সুতরাং, যেহেতু keypressইভেন্টটি দুটি ফলস্বরূপ বরখাস্ত হওয়া ইভেন্টগুলির মধ্যে একত্রিত হয়েছে keydownএবং keyupএকই কী এর জন্য নিম্নলিখিতটি ঘটেছে , কেবল ইভেন্টগুলি একে একে তৈরি করুন:

element.dispatchEvent(new KeyboardEvent('keydown',{'key':'Shift'}));
element.dispatchEvent(new KeyboardEvent('keyup',{'key':'Shift'}));

13

অ্যালেক্স 2 কে 8 থেকে উত্তরের ভিত্তিতে, এখানে একটি সংশোধিত সংস্করণ দেওয়া হয়েছে যা সমস্ত ব্রাউজারগুলিতে কাজ করে যা jQuery সমর্থন করে (সমস্যাটি jQuery.event.trigger- তে অনুপস্থিত আর্গুমেন্টে ছিল যা অভ্যন্তরীণ ফাংশনটি ব্যবহার করার সময় ভুলে যাওয়া সহজ)।

// jQuery plugin. Called on a jQuery object, not directly.
jQuery.fn.simulateKeyPress = function (character) {
  // Internally calls jQuery.event.trigger with arguments (Event, data, elem).
  // That last argument, 'elem', is very important!
  jQuery(this).trigger({ type: 'keypress', which: character.charCodeAt(0) });
};

jQuery(function ($) {
  // Bind event handler
  $('body').keypress(function (e) {
    alert(String.fromCharCode(e.which));
    console.log(e);
  });
  // Simulate the key press
  $('body').simulateKeyPress('x');
});

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


1
সেন্ডকিগুলি কীপ্রেসগুলি অনুকরণ করে না এটি কেবলমাত্র লক্ষ্য উপাদানগুলিতে মানকে ইনজেক্ট করে।
আহমেদ মাসুদ

2
কোনও হার্ডওয়ার কী-প্রেশার সিমুলেট করে না, কেবলমাত্র বাইন্ডেড কী-প্রেসার ফাংশন কল করে।
কোডবিট

8

আগ্রহীদের জন্য, আপনি প্রকৃতপক্ষে কীবোর্ড ইনপুট ইভেন্টগুলি নির্ভরযোগ্যভাবে পুনরায় তৈরি করতে পারেন। ইনপুট অঞ্চলে পাঠ্য পরিবর্তন করতে (কার্সারগুলি সরান, বা একটি ইনপুট চরিত্রের মাধ্যমে পৃষ্ঠাটি সরাতে) আপনাকে DOM ইভেন্টের মডেলটি নিবিড়ভাবে অনুসরণ করতে হবে: http://www.w3.org/TR/DOM-Lelvel-3-Events/ # h4_events-inputevents

মডেলটি করা উচিত:

  • ফোকাস (লক্ষ্য সেট সহ DOM এ প্রেরণ)

তারপরে প্রতিটি চরিত্রের জন্য:

  • কীডাউন (ডিওমে প্রেরিত)
  • পূর্বে ইনপুট (লক্ষ্যতে পাঠানো হয় যদি এটি কোনও টেক্সারিয়া বা ইনপুট থাকে)
  • কিপ্রেস (ডিওমে প্রেরণ করা হয়েছে)
  • ইনপুট (এটি যদি টেক্সারিয়া বা ইনপুট থাকে তবে লক্ষ্যমাত্রায় প্রেরণ করা হয়)
  • পরিবর্তন (লক্ষ্য যদি এটি নির্বাচন করা হয় প্রেরণ)
  • কীআপ (ডিওমে প্রেরিত)

তারপরে, বেশিরভাগের জন্য allyচ্ছিকভাবে:

  • অস্পষ্টতা (লক্ষ্য সেট সহ DOM এ প্রেরণ)

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

দুর্ভাগ্যক্রমে কোডটি কোনও এনডিএর অধীনে কোনও নিয়োগকর্তার জন্য লেখা হয়েছিল তাই আমি এটি ভাগ করতে পারি না তবে এটি অবশ্যই সম্ভব তবে আপনাকে অবশ্যই প্রতিটি ক্রমের জন্য প্রতিটি মূল ইনপুট "স্ট্যাক" সঠিক ক্রমে পুনরায় তৈরি করতে হবে।


8
জাভাস্ক্রিপ্টের জন্য এনডিএ? সত্যি? যাইহোক, প্রতিটি চরিত্রের জন্য আপনার অ্যালগরিদমটি ভুল, "ইনপুট" ইভেন্টটি যেকোনভাবে পুরো কীডাউন, কীপ ইভেন্ট বা অন্য কোনও ইভেন্টের মধ্যে না গিয়ে পাঠ্য যুক্ত করে। "কী" বোতাম টিপতে এবং "aaaaaaa" একাধিকবার আশা করা ইত্যাদি একাধিক কী কী চাপ ইভেন্টগুলি হ্যান্ডেল করা যায় তা সমস্যা।
আকাশ কাভা

1
কৌশলটি একটি কীডাউন, ইনপুট, তারপরে কীআপটি ফায়ার করা। আপনি যদি একাধিক "আআআআআআ" চান তবে ইনপুট ইভেন্টটি চালিয়ে যান। এবং কাউকে বলো না
ট্রেভর

4
আমি এটি চেষ্টা করে দেখেছি তবে এটি পুরোপুরি কাজ করছে বলে মনে হচ্ছে না: আমি এন্টার, ব্যাকস্পেস বা তীর কীগুলির জন্য ইভেন্টগুলি ট্রিগার করতে পারি, তবে অক্ষর দিয়ে নয়। উদাহরণস্বরূপ, আমি এই পদ্ধতির মাধ্যমে পাঠ্য ইনপুট করতে পারছি না যদিও আমি আপনার ইভেন্টগুলির ক্রমটিকে ঘনিষ্ঠভাবে অনুসরণ করেছি।
ট্যাকটিকাস

@ কৌশল দ্বারা সুযোগ পেয়ে এখনও আপনার এই উত্তর অনুসারে এন্টার ট্রিগার কোড কোড আছে?
সায়াবাস

1
আমি চেষ্টা করেছিলাম, ভাগ্য নেই।
ম্যাসন

8

2019 হিসাবে, এই সমাধানটি আমার পক্ষে কাজ করেছে:

document.dispatchEvent(
  new KeyboardEvent("keydown", {
    key: "e",
    keyCode: 69, // example values.
    code: "KeyE", // put everything you need in this object.
    which: 69,
    shiftKey: false, // you don't need to include values
    ctrlKey: false,  // if you aren't going to use them.
    metaKey: false   // these are here for example's sake.
  })
);

সিমুলেটেড কীপ্যাড সহ মোবাইল ডিভাইসগুলিকে সমর্থন করার জন্য, আমি এটি আমার ব্রাউজার গেমটিতে ব্যবহার করেছি।

স্পেসিফিকেশন: এই কোডটি একটি একক keydownইভেন্ট প্রেরণ করে , যখন একটি আসল কী প্রেসটি একটি keydownইভেন্ট (বা এটি বেশ কিছুক্ষণ ধরে রাখলে তাদের বেশ কয়েকটি) ট্রিগার করে এবং তারপরে keyupআপনি যখন কীটি প্রকাশ করেন তখন একটি ইভেন্ট। আপনার যদি keyupইভেন্টগুলির প্রয়োজন হয় তবে কোড স্নিপেটে keyupপরিবর্তন "keydown"করে ইভেন্টগুলি অনুকরণ করাও সম্ভব "keyup"

এটি ইভেন্টটি পুরো ওয়েবপৃষ্ঠায় প্রেরণ করে, সুতরাং document। ইভেন্টটি পেতে যদি আপনি কেবল একটি নির্দিষ্ট উপাদান চান তবে আপনি documentপছন্দসই উপাদানটির বিকল্প নিতে পারেন ।


1
এই একমাত্র সমাধান যা Qt QWebEngine রান জাভাস্ক্রিপ্ট ফাংশনে আমার জন্য কাজ করেছিল। ধন্যবাদ
ম্যাক্সেক্স

ফ্ল্যাশ গেমগুলি কোনও কারণে সম্পূর্ণ উপেক্ষা করা হয়েছে (সম্ভবত ফ্ল্যাশ যা কিছু নয় তা উপেক্ষা করে Trusted?)
hanshenrik

@হানশেরিক - সত্যি কথা বলতে, আপনি যদি ২০২০ সালে ফ্ল্যাশ ব্যবহার করেন তবে আপনার উদ্দেশ্যটির জন্য কোন সরঞ্জামগুলি সবচেয়ে উপযুক্ত you
হলি

7

এই পদ্ধতির মূল কোডের মান পরিবর্তন করে ক্রস ব্রাউজার সমর্থন করে । সূত্র

var $textBox = $("#myTextBox");

var press = jQuery.Event("keypress");
press.altGraphKey = false;
press.altKey = false;
press.bubbles = true;
press.cancelBubble = false;
press.cancelable = true;
press.charCode = 13;
press.clipboardData = undefined;
press.ctrlKey = false;
press.currentTarget = $textBox[0];
press.defaultPrevented = false;
press.detail = 0;
press.eventPhase = 2;
press.keyCode = 13;
press.keyIdentifier = "";
press.keyLocation = 0;
press.layerX = 0;
press.layerY = 0;
press.metaKey = false;
press.pageX = 0;
press.pageY = 0;
press.returnValue = true;
press.shiftKey = false;
press.srcElement = $textBox[0];
press.target = $textBox[0];
press.type = "keypress";
press.view = Window;
press.which = 13;

$textBox.trigger(press);

7

শুধু কাস্টম এভেন্ট ব্যবহার করুন

Node.prototype.fire=function(type,options){
     var event=new CustomEvent(type);
     for(var p in options){
         event[p]=options[p];
     }
     this.dispatchEvent(event);
}

4 প্রাক্তন ctrl + z অনুকরণ করতে চান

window.addEventListener("keyup",function(ev){
     if(ev.ctrlKey && ev.keyCode === 90) console.log(ev); // or do smth
     })

 document.fire("keyup",{ctrlKey:true,keyCode:90,bubbles:true})

আমি আপনার কোড চেষ্টা করছি। আমি যদি একটি কী চাপি তবে আমি শ্রোতাদের কাছে ,ুকতে পারি, তবে ডকুমেন্ট.ফায়ারের কোনও প্রভাব নেই।
চিহ্নিত করুন

"(" কোন সমস্যা আমি একটি আইকনে ক্লিক করে এটি triggering করছি আমি এটা সরাসরি নির্দিষ্ট এটা document.fire পর তা ঠিক পেয়ে নয়
মার্ক

আমার কোডটি এরকম কিছু: <img src = "settings.svg" উচ্চতা = "22" প্রস্থ = "24" শৈলী = "কার্সার: পয়েন্টার;" এনজি-ক্লিক = "ওপেনএডমিন কনসোল ()"> ওপেনএডমিন কনসোলে () আমি ডকুমেন্ট.ফায়ার করছি। এটা কি সঠিক নয়?
চিহ্নিত করুন

4

এখানে একটি লাইব্রেরি যা সত্যই সহায়তা করে: https://cdn.rawgit.com/ccampbell/mousetrap/2e5c2a8adbe80a89050aaf4e02c45f02f1cc12d4/tests/libs/key-event.js

কোথা থেকে এসেছে তা আমি জানি না, তবে এটি সহায়ক is এটিতে একটি .simulate()পদ্ধতি যুক্ত করে window.KeyEvent, তাই আপনি এটিকে কেবল KeyEvent.simulate(0, 13)একটি অনুকরণের জন্য enterবা এ এর KeyEvent.simulate(81, 81)জন্য ব্যবহার করেন 'Q'

আমি এটি https://github.com/ccampbell/mousetrap/tree/master/tests এ পেয়েছি ।


4

এটি আমার পক্ষে কাজ করেছে এবং এটি আমার পাঠ্যপুস্তকের জন্য একটি কীপ সিমুলেট করে। যদি আপনি এটি সমগ্র পৃষ্ঠার জন্য চান শুধু করা KeySimulation()উপর <body>ভালো <body onmousemove="KeySimulation()">বা যদি না onmousemoveতারপর onmouseoverবা onloadকাজ খুব।

<script>
function KeySimulation()
{
var e = document.createEvent("KeyboardEvent");
if (e.initKeyboardEvent) {  // Chrome, IE
    e.initKeyboardEvent("keyup", true, true, document.defaultView, "Enter", 0, "", false, "");
} else { // FireFox
    e.initKeyEvent("keyup", true, true, document.defaultView, false, false, false, false, 13, 0);
}
document.getElementById("MyTextArea").dispatchEvent(e);
}
</script>

<input type="button" onclick="KeySimulation();" value=" Key Simulation " />
<textarea id="MyTextArea" rows="15" cols="30"></textarea>

2
সতর্কতা অবলম্বন করুন যে initKeyboardEventহ্রাস করা হয়। ( উত্স )
রেডিওভিজুয়াল

4

কনসোল প্রসঙ্গে সহজে ব্যবহারের কারণে এটি একবারে রোড হয়েছিল। তবে সম্ভবত এখনও দরকারী।

    var pressthiskey = "q"/* <-- q for example */;
    var e = new Event("keydown");
    e.key = pressthiskey;
    e.keyCode = e.key.charCodeAt(0);
    e.which = e.keyCode;
    e.altKey = false;
    e.ctrlKey = true;
    e.shiftKey = false;
    e.metaKey = false;
    e.bubbles = true;
    document.dispatchEvent(e);

2

এখানে একটি সমাধান যা ক্রোম এবং ক্রোমিয়ামে কাজ করে (কেবলমাত্র এই প্ল্যাটফর্মগুলি পরীক্ষা করেছে)। মনে হচ্ছে কী কোডগুলি পরিচালনা করার জন্য ক্রোমের কিছু ত্রুটি বা নিজস্ব পদ্ধতি রয়েছে তাই এই সম্পত্তিটি কীবোর্ডে আলাদাভাবে যুক্ত করতে হবে।

function simulateKeydown (keycode,isCtrl,isAlt,isShift){
    var e = new KeyboardEvent( "keydown", { bubbles:true, cancelable:true, char:String.fromCharCode(keycode), key:String.fromCharCode(keycode), shiftKey:isShift, ctrlKey:isCtrl, altKey:isAlt } );
    Object.defineProperty(e, 'keyCode', {get : function() { return this.keyCodeVal; } });     
    e.keyCodeVal = keycode;
    document.dispatchEvent(e);
}

1

এটি আমি খুঁজে পেতে পরিচালিত:

function createKeyboardEvent(name, key, altKey, ctrlKey, shiftKey, metaKey, bubbles) {
  var e = new Event(name)
  e.key = key
  e.keyCode = e.key.charCodeAt(0)
  e.which = e.keyCode
  e.altKey = altKey
  e.ctrlKey = ctrlKey
  e.shiftKey = shiftKey
  e.metaKey =  metaKey
  e.bubbles = bubbles
  return e
}

var name = 'keydown'
var key = 'a'

var event = createKeyboardEvent(name, key, false, false, false, false, true)

document.addEventListener(name, () => {})
document.dispatchEvent(event)

1

টাইপস্ক্রিপ্ট সমর্থিত সমাধান সহ নেটিভ জাভাস্ক্রিপ্ট:

কী কোড বা যে কোনও সম্পত্তি আপনি ব্যবহার করছেন তা টাইপ করুন এবং এটিকে কী-বোর্ড-এভেন্টআইনেটিতে কাস্ট করুন

উদাহরণ

const event = new KeyboardEvent("keydown", {
          keyCode: 38,
        } as KeyboardEventInit);

1

আমি ক্রোমে জেএস / টাইপস্ক্রিপ্ট দিয়ে চেষ্টা করেছি। অনুপ্রেরণার জন্য এই উত্তর ধন্যবাদ ।

const x = document.querySelector('input');

const keyboardEvent = new KeyboardEvent("keypress", { bubbles: true });
Object.defineProperty(keyboardEvent, "charCode", {
  get() {
    return 13;
  },
});
x.dispatchEvent(keyboardEvent);

0

ব্যবহারকারী প্রশ্নে থাকা কীটি টিপানোর সাথে সাথে আপনি সেটির জন্য একটি রেফারেন্সও সঞ্চয় করতে পারেন এবং এটি কোনও এইচটিএমএল অন্য উপাদানটিতে ব্যবহার করতে পারেন:

EnterKeyPressToEmulate<input class="lineEditInput" id="addr333_1" type="text" style="width:60%;right:0%;float:right" onkeydown="keyPressRecorder(event)"></input>
TypeHereToEmulateKeyPress<input class="lineEditInput" id="addr333_2" type="text" style="width:60%;right:0%;float:right" onkeydown="triggerKeyPressOnNextSiblingFromWithinKeyPress(event)">
Itappears Here Too<input class="lineEditInput" id="addr333_3" type="text" style="width:60%;right:0%;float:right;" onkeydown="keyPressHandler(event)">
<script>
var gZeroEvent;
function keyPressRecorder(e)
{
  gZeroEvent = e;
}
function triggerKeyPressOnNextSiblingFromWithinKeyPress(TTT)
{
  if(typeof(gZeroEvent) != 'undefined')  {
TTT.currentTarget.nextElementSibling.dispatchEvent(gZeroEvent);
keyPressHandler(TTT);
  }
}
function keyPressHandler(TTT)
{
  if(typeof(gZeroEvent) != 'undefined')  {
TTT.currentTarget.value+= gZeroEvent.key;
event.preventDefault();
event.stopPropagation();
  }
}
</script>

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

ta = new KeyboardEvent('keypress',{ctrlKey:true,key:'Escape'})

0

আমি জানি যে প্রশ্নটি কোনও কীপ্রেস অনুকরণের জাভাস্ক্রিপ্টের জন্য জিজ্ঞাসা করে। তবে যারা কাজ করার জন্য jQuery উপায় খুঁজছেন তাদের জন্য:

var e = jQuery.Event("keypress");
e.which = 13 //or e.keyCode = 13 that simulates an <ENTER>
$("#element_id").trigger(e); 

0

কাজ করার জন্য এই পাবার সমালোচনামূলক অংশ যে উপলব্ধি করা হয় charCode, keyCodeএবং whichহয় সব পদ্ধতি অবচিত । সুতরাং কোডটি প্রসেসিং যদি কী প্রেস ইভেন্টটিকে এই তিনটির কোনও ব্যবহার করে, তবে এটি একটি বোগাস উত্তর পাবেন (উদাহরণস্বরূপ 0 এর একটি ডিফল্ট)।

যতক্ষণ না আপনি অবহিত পদ্ধতিতে কী প্রেস ইভেন্টটি অ্যাক্সেস করেন, যেমন key, আপনার ঠিক আছে।

সমাপ্তির জন্য, আমি ইভেন্টটি ট্রিগার করার জন্য প্রাথমিক জাভাস্ক্রিপ্ট কোড যুক্ত করেছি:

const rightArrowKey = 39
const event = new KeyboardEvent('keydown',{'key':rightArrowKey})
document.dispatchEvent(event)

0

আমি একটি 'ট্যাব' প্রেস অনুকরণ করতে চেয়েছিলাম ... ট্রেভরের উত্তরটি প্রসারিত করে, আমরা দেখতে পাচ্ছি যে 'ট্যাব' এর মতো একটি বিশেষ কী টিপতে পারে তবে আমরা কোনও 'ট্যাব' প্রেসের প্রকৃত ফলাফল দেখতে পাই না .. ।

'অ্যাক্টিভেটমেন্ট' এর জন্য এই ইভেন্টগুলি প্রেরণের পাশাপাশি গ্লোবাল ডকুমেন্ট উভয় বস্তুর জন্য চেষ্টা করার চেষ্টা করা হয়েছে - উভয়ের কোড নীচে যুক্ত করা হয়েছে;

নীচে স্নিপেট :

var element = document.getElementById("firstInput");

document.addEventListener("keydown", function(event) {

  console.log('we got key:', event.key, '  keyCode:', event.keyCode, '  charCode:', event.charCode);

  /* enter is pressed */
  if (event.keyCode == 13) {
    console.log('enter pressed:', event);

    setTimeout(function() {
      /*  event.keyCode = 13;  event.target.value += 'b';  */

      theKey = 'Tab';
      var e = new window.KeyboardEvent('focus', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.activeElement.dispatchEvent(e);
      e = new window.KeyboardEvent('keydown', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.activeElement.dispatchEvent(e);
      e = new window.KeyboardEvent('beforeinput', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.activeElement.dispatchEvent(e);
      e = new window.KeyboardEvent('keypress', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.activeElement.dispatchEvent(e);
      e = new window.KeyboardEvent('input', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.activeElement.dispatchEvent(e);
      e = new window.KeyboardEvent('change', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.activeElement.dispatchEvent(e);
      e = new window.KeyboardEvent('keyup', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.activeElement.dispatchEvent(e);
    }, 4);

    setTimeout(function() {
      theKey = 'Tab';
      var e = new window.KeyboardEvent('focus', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.dispatchEvent(e);
      e = new window.KeyboardEvent('keydown', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.dispatchEvent(e);
      e = new window.KeyboardEvent('beforeinput', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.dispatchEvent(e);
      e = new window.KeyboardEvent('keypress', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.dispatchEvent(e);
      e = new window.KeyboardEvent('input', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.dispatchEvent(e);
      e = new window.KeyboardEvent('change', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.dispatchEvent(e);
      e = new window.KeyboardEvent('keyup', {
        bubbles: true,
        key: theKey,
        keyCode: 9,
        charCode: 0,
      });
      document.dispatchEvent(e);
    }, 100);



  } else if (event.keyCode != 0) {
    console.log('we got a non-enter press...: :', event.key, '  keyCode:', event.keyCode, '  charCode:', event.charCode);
  }

});
<h2>convert each enter to a tab in JavaScript... check console for output</h2>
<h3>we dispatchEvents on the activeElement... and the global element as well</h3>

<input type='text' id='firstInput' />
<input type='text' id='secondInput' />

<button type="button" onclick="document.getElementById('demo').innerHTML = Date()">
    Click me to display Date and Time.</button>
<p id="demo"></p>

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