আমি একটি পাঠ্য বাক্স ব্যবহার করে একটি ইভেন্ট সংযুক্ত করেছি addEventListener
। এটা ঠিক কাজ করে। আমার সমস্যাটি তখনই উদ্ভূত হয়েছিল যখন আমি ইভেন্টটি প্রোগ্রাম থেকে অন্য ফাংশন থেকে ট্রিগার করতে চেয়েছিলাম।
আমি এটা কিভাবে করবো?
আমি একটি পাঠ্য বাক্স ব্যবহার করে একটি ইভেন্ট সংযুক্ত করেছি addEventListener
। এটা ঠিক কাজ করে। আমার সমস্যাটি তখনই উদ্ভূত হয়েছিল যখন আমি ইভেন্টটি প্রোগ্রাম থেকে অন্য ফাংশন থেকে ট্রিগার করতে চেয়েছিলাম।
আমি এটা কিভাবে করবো?
উত্তর:
আপনি ব্যবহার করতে পারেন fireEvent উপর আই ই 8 W3C এর কম বা, এবং dispatchEvent উপর সবচেয়ে অন্যান্য ব্রাউজার। আপনি যে ইভেন্টটি চালাতে চান তা তৈরি করতে আপনি ব্রাউজারের উপর নির্ভর করে createEvent
বা ব্যবহার করতে পারেন createEventObject
।
এখানে একটি স্বশাসিত কোড (প্রোটোটাইপ থেকে) টুকরা যে একটি ইভেন্ট আগুন হয় dataavailable
একটি অন element
:
var event; // The custom event that will be created
if(document.createEvent){
event = document.createEvent("HTMLEvents");
event.initEvent("dataavailable", true, true);
event.eventName = "dataavailable";
element.dispatchEvent(event);
} else {
event = document.createEventObject();
event.eventName = "dataavailable";
event.eventType = "dataavailable";
element.fireEvent("on" + event.eventType, event);
}
eventName
এখানে কী ধারণ করে?
একটি কার্যকরী উদাহরণ:
// Add an event listener
document.addEventListener("name-of-event", function(e) {
console.log(e.detail); // Prints "Example of an event"
});
// Create the event
var event = new CustomEvent("name-of-event", { "detail": "Example of an event" });
// Dispatch/Trigger/Fire the event
document.dispatchEvent(event);
পুরানো ব্রাউজারগুলির পলিফিল এবং আরও জটিল উদাহরণগুলির জন্য, MDN ডক্স দেখুন ।
জন্য সমর্থন টেবিল দেখুন EventTarget.dispatchEvent
এবং CustomEvent
।
detail
একটি সম্পত্তি Event
, তাই আপনি অন্য প্রান্তে এটি অ্যাক্সেস করতে চান এমন কোনও ডেটা নির্ধারণ করুন এবং এর মাধ্যমে অ্যাক্সেস করুন event.detail
। +1
আপনি jQuery ব্যবহার করতে না চান এবং পিছনের সামঞ্জস্যতা সম্পর্কে বিশেষত উদ্বিগ্ন না হলে, কেবল ব্যবহার করুন:
let element = document.getElementById(id);
element.dispatchEvent(new Event("change")); // or whatever the event type might be
এখানে এবং এখানে ডকুমেন্টেশন দেখুন ।
সম্পাদনা: আপনার সেটআপের উপর নির্ভর করে আপনি যুক্ত করতে চাইতে পারেন bubbles: true
:
let element = document.getElementById(id);
element.dispatchEvent(new Event('change', { 'bubbles': true }));
CustomEvent
এবং সেই অনুযায়ী পলিফিল ব্যবহার করা উচিত ।
আপনি jQuery ব্যবহার করেন, আপনি সহজ করতে পারেন
$('#yourElement').trigger('customEventName', [arg0, arg1, ..., argN]);
এবং এটি দিয়ে পরিচালনা করুন
$('#yourElement').on('customEventName',
function (objectEvent, [arg0, arg1, ..., argN]){
alert ("customEventName");
});
যেখানে "[arg0, arg1, ..., argN]" এর অর্থ এই অর্গগুলি alচ্ছিক।
আপনি যদি IE9 + সমর্থন করেন তবে নিম্নলিখিতগুলি ব্যবহার করতে পারেন। একই ধারণা অন্তর্ভূক্ত করা থাকে আপনি jQuery প্রয়োজন নাও হতে পারে ।
function addEventListener(el, eventName, handler) {
if (el.addEventListener) {
el.addEventListener(eventName, handler);
} else {
el.attachEvent('on' + eventName, function() {
handler.call(el);
});
}
}
function triggerEvent(el, eventName, options) {
var event;
if (window.CustomEvent) {
event = new CustomEvent(eventName, options);
} else {
event = document.createEvent('CustomEvent');
event.initCustomEvent(eventName, true, true, options);
}
el.dispatchEvent(event);
}
// Add an event listener.
addEventListener(document, 'customChangeEvent', function(e) {
document.body.innerHTML = e.detail;
});
// Trigger the event.
triggerEvent(document, 'customChangeEvent', {
detail: 'Display on trigger...'
});
আপনি যদি ইতিমধ্যে jQuery ব্যবহার করে থাকেন তবে উপরের কোডটির jQuery সংস্করণ এখানে।
$(function() {
// Add an event listener.
$(document).on('customChangeEvent', function(e, opts) {
$('body').html(opts.detail);
});
// Trigger the event.
$(document).trigger('customChangeEvent', {
detail: 'Display on trigger...'
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
window.CustomEvent
বিদ্যমান আছে তবে এটি নির্মাতা হিসাবে বলা যায় না: caniuse.com/#search=CustomEvent ;)
আমি জাভাস্ক্রিপ্ট ব্যবহার করে মাউসওভারে ফায়ারিং ক্লিক, মাউসডাউন এবং মাউসআপ ইভেন্ট অনুসন্ধান করেছি। হুয়ান মেন্ডেসের দেওয়া উত্তর আমি পেয়েছি । উত্তরের জন্য এখানে ক্লিক করুন ।
এখানে ক্লিক করুন লাইভ ডেমো এবং নীচে কোডটি রয়েছে:
function fireEvent(node, eventName) {
// Make sure we use the ownerDocument from the provided node to avoid cross-window problems
var doc;
if (node.ownerDocument) {
doc = node.ownerDocument;
} else if (node.nodeType == 9) {
// the node may be the document itself, nodeType 9 = DOCUMENT_NODE
doc = node;
} else {
throw new Error("Invalid node passed to fireEvent: " + node.id);
}
if (node.dispatchEvent) {
// Gecko-style approach (now the standard) takes more work
var eventClass = "";
// Different events have different event classes.
// If this switch statement can't map an eventName to an eventClass,
// the event firing is going to fail.
switch (eventName) {
case "click": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead.
case "mousedown":
case "mouseup":
eventClass = "MouseEvents";
break;
case "focus":
case "change":
case "blur":
case "select":
eventClass = "HTMLEvents";
break;
default:
throw "fireEvent: Couldn't find an event class for event '" + eventName + "'.";
break;
}
var event = doc.createEvent(eventClass);
var bubbles = eventName == "change" ? false : true;
event.initEvent(eventName, bubbles, true); // All events created as bubbling and cancelable.
event.synthetic = true; // allow detection of synthetic events
// The second parameter says go ahead with the default action
node.dispatchEvent(event, true);
} else if (node.fireEvent) {
// IE-old school style
var event = doc.createEventObject();
event.synthetic = true; // allow detection of synthetic events
node.fireEvent("on" + eventName, event);
}
};
কেবল এমন একটি বিকল্প প্রস্তাব দেওয়ার জন্য যা শ্রোতার ইভেন্টটিকে ম্যানুয়ালি আহ্বান করার প্রয়োজনের সাথে জড়িত না:
আপনার ইভেন্ট শ্রোতা যাই করুক না কেন, এটিকে একটি ফাংশনে স্থানান্তরিত করুন এবং ইভেন্ট শ্রোতার কাছ থেকে সেই ফাংশনটি কল করুন।
তারপরে, আপনি সেই ফাংশনটি অন্য কোথাও কল করতেও পারেন যে ঘটনাটি যখন আগুন জ্বলে ওঠে তখন আপনার একই কাজটি করা দরকার।
আমি এই কম "কোড নিবিড়" এবং পড়া সহজ।
আমি কেবল নিম্নলিখিতটি ব্যবহার করেছি (অনেক সহজ বলে মনে হচ্ছে):
element.blur();
element.focus();
এই ক্ষেত্রে ইভেন্টটি কেবল তখনই ট্রিগার করা হয় যখন মানটি সত্যই পরিবর্তিত হয় যেমন আপনি এটি ব্যবহারকারীর দ্বারা সম্পাদিত সাধারণ ফোকাস লোকস দ্বারা ট্রিগার করবেন।
element.click()
।
আইইয়ের সাথে কাজ করার জন্য @ ডরিয়ানের উত্তর পরিবর্তিত হয়েছে :
document.addEventListener("my_event", function(e) {
console.log(e.detail);
});
var detail = 'Event fired';
try {
// For modern browsers except IE:
var event = new CustomEvent('my_event', {detail:detail});
} catch(err) {
// If IE 11 (or 10 or 9...?) do it this way:
// Create the event.
var event = document.createEvent('Event');
// Define that the event name is 'build'.
event.initEvent('my_event', true, true);
event.detail = detail;
}
// Dispatch/Trigger/Fire the event
document.dispatchEvent(event);
ফিডল: https://jsfiddle.net/z6zom9d0/1/
এছাড়াও দেখুন: https://caniuse.com/#feat=customevent vent
গৃহীত উত্তরটি আমার পক্ষে কার্যকর হয়নি, ক্রিয়েভেন্ট এভেন্টসগুলির কেউই করেনি।
শেষ পর্যন্ত আমার জন্য যা কাজ করেছে তা হ'ল:
targetElement.dispatchEvent(
new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: window,
}));
এখানে একটি স্নিপেট রয়েছে:
const clickBtn = document.querySelector('.clickme');
const viaBtn = document.querySelector('.viame');
viaBtn.addEventListener('click', function(event) {
clickBtn.dispatchEvent(
new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: window,
}));
});
clickBtn.addEventListener('click', function(event) {
console.warn(`I was accessed via the other button! A ${event.type} occurred!`);
});
<button class="clickme">Click me</button>
<button class="viame">Via me</button>
পড়া থেকে: https://developer.mozilla.org/en-US/docs/Web/API/ মাউস এভেন্ট
function fireMouseEvent(obj, evtName) {
if (obj.dispatchEvent) {
//var event = new Event(evtName);
var event = document.createEvent("MouseEvents");
event.initMouseEvent(evtName, true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
obj.dispatchEvent(event);
} else if (obj.fireEvent) {
event = document.createEventObject();
event.button = 1;
obj.fireEvent("on" + evtName, event);
obj.fireEvent(evtName);
} else {
obj[evtName]();
}
}
var obj = document.getElementById("......");
fireMouseEvent(obj, "click");
আপনি একসাথে সংকলিত এই ফাংশনটি ব্যবহার করতে পারেন।
if (!Element.prototype.trigger)
{
Element.prototype.trigger = function(event)
{
var ev;
try
{
if (this.dispatchEvent && CustomEvent)
{
ev = new CustomEvent(event, {detail : event + ' fired!'});
this.dispatchEvent(ev);
}
else
{
throw "CustomEvent Not supported";
}
}
catch(e)
{
if (document.createEvent)
{
ev = document.createEvent('HTMLEvents');
ev.initEvent(event, true, true);
this.dispatchEvent(event);
}
else
{
ev = document.createEventObject();
ev.eventType = event;
this.fireEvent('on'+event.eventType, event);
}
}
}
}
নীচে একটি ইভেন্ট ট্রিগার:
var dest = document.querySelector('#mapbox-directions-destination-input');
dest.trigger('focus');
ইভেন্ট দেখুন:
dest.addEventListener('focus', function(e){
console.log(e);
});
আশাকরি এটা সাহায্য করবে!
আপনি এলিমেন্ট পদ্ধতি ব্যবহার করে ইভেন্টটি ফায়ার করতে নীচে কোড ব্যবহার করতে পারেন:
if (!Element.prototype.triggerEvent) {
Element.prototype.triggerEvent = function (eventName) {
var event;
if (document.createEvent) {
event = document.createEvent("HTMLEvents");
event.initEvent(eventName, true, true);
} else {
event = document.createEventObject();
event.eventType = eventName;
}
event.eventName = eventName;
if (document.createEvent) {
this.dispatchEvent(event);
} else {
this.fireEvent("on" + event.eventType, event);
}
};
}
var btn = document.getElementById('btn-test');
var event = new Event(null);
event.initEvent('beforeinstallprompt', true, true);
btn.addEventListener('beforeinstallprompt', null, false);
btn.dispatchEvent(event);
এটি উদ্দেশ্যপূর্বক একটি ইভেন্ট 'পূর্বে ইনস্টল প্রম্পট' ট্রিগার করবে
Jquery ইভেন্ট কল ব্যবহার করুন। নীচের লাইনটি লিখুন যেখানে আপনি যে কোনও উপাদানটির পরিবর্তন করতে চান।
$("#element_id").change();
এলিমেন্ট_আইডি হল সেই এলিমেন্টের আইডি, যার অনচেনাজ আপনি ট্রিগার করতে চান।
এর ব্যবহার এড়িয়ে চলুন
element.fireEvent("onchange");
কারণ এর খুব কম সমর্থন রয়েছে। এর সমর্থনের জন্য এই দস্তাবেজটি দেখুন ।
এইচটিএমএল
<a href="demoLink" id="myLink"> myLink </a>
<button onclick="fireLink(event)"> Call My Link </button>
জাতীয়
// click event listener of the link element --------------
document.getElementById('myLink').addEventListener("click", callLink);
function callLink(e) {
// code to fire
}
// function invoked by the button element ----------------
function fireLink(event) {
document.getElementById('myLink').click(); // script calls the "click" event of the link element
}
আপনি যা চান তা হ'ল কিছু:
document.getElementByClassName("example").click();
JQuery ব্যবহার করে এটি এমন কিছু হবে:
$(".example").trigger("click");
document.getElementByClassName
বিদ্যমান নেই। 2. document.getElementsByClassName
বিদ্যমান কিন্তু একটি তালিকা ফেরত। ৩. এটি কেবল কয়েকটি কয়েকটি স্থানীয় ইভেন্টের জন্য কাজ করে। ৪. সর্বশেষ উদাহরণটি jQuery ইভেন্টকে ট্রিগার করে যেখানে কোনও অন্তর্নিহিত নেটিভ ইভেন্টের উপস্থিতি নেই।