Custom Events in JavaScript
Create and dispatch custom events
IntermediateEvents ProgramsExample 2 of 10
custom-events.js
1// Method 1: Create custom event2const customEvent = new CustomEvent('myCustomEvent', {3 detail: { message: 'Hello from custom event', data: 123 },4 bubbles: true,5 cancelable: true6});78// Listen for custom event9document.addEventListener('myCustomEvent', function(event) {10 console.log('Custom event received:', event.detail);11 console.log('Message:', event.detail.message);12 console.log('Data:', event.detail.data);13});1415// Dispatch custom event16document.dispatchEvent(customEvent);1718// Method 2: Custom event on specific element19const button = document.getElementById('myButton');2021button.addEventListener('buttonClicked', function(e) {22 console.log('Button custom event:', e.detail);23});2425const buttonEvent = new CustomEvent('buttonClicked', {26 detail: { buttonId: 'myButton', timestamp: Date.now() }27});2829button.dispatchEvent(buttonEvent);3031// Method 3: Event with data32const dataEvent = new CustomEvent('dataUpdate', {33 detail: {34 userId: 123,35 action: 'update',36 payload: { name: 'John', age: 30 }37 }38});3940document.addEventListener('dataUpdate', function(e) {41 console.log('User ID:', e.detail.userId);42 console.log('Action:', e.detail.action);43 console.log('Payload:', e.detail.payload);44});4546document.dispatchEvent(dataEvent);4748// Method 4: Event with validation49function createValidatedEvent(type, data) {50 if (!data || typeof data !== 'object') {51 throw new Error('Data must be an object');52 }5354 return new CustomEvent(type, {55 detail: data,56 bubbles: true,57 cancelable: true58 });59}6061const validatedEvent = createValidatedEvent('validated', { value: 42 });62document.dispatchEvent(validatedEvent);
Output
Custom event received: { message: 'Hello from custom event', data: 123 }
Message: Hello from custom event
Data: 123
User ID: 123
Action: update
Payload: { name: 'John', age: 30 }What's going on
Custom events enable communication between components.
CustomEvent Constructor
type: Event name
detail: Custom data
bubbles: Propagate up DOM
cancelable: Can be prevented
Use Cases
Component communication
Decoupled architecture
Custom notifications
Plugin systems
Benefits
Loose coupling
Reusable components
Better organization
Event-driven architecture