Custom Events in JavaScript

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta name="generator"
    content="HTML Tidy for HTML5 (experimental) for Windows https://github.com/w3c/tidy-html5/tree/c63cc39" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta charset="UTF-8" />
    <title>Custom event delegation in JavaScript</title>
    <link type="text/stylesheet" href="app.css" />
  </head>
  <body>
    <h1>Custom Events in JavaScript</h1>
    <p>
		This demonstration creates a new event type named "newMessage" which is fired whenever a valid message is
		submitted. The event can be delegated to any number of subscribers.
	</p>
    
    <form id="msgbox" action="http://bing.com" method="get">
      <fieldset>
		<label for="msg">your message</label> 
		<input id="msg" value="" /> 
		<button>SEND</button>
	  </fieldset>
    </form>
    <pre id="log">
Event information log
=====================
</pre>
    <script src="app.js"></script>
  </body>
</html>
app.css
body
{
	font-family: arial, helvetica, freesans, sans-serif;
	font-size: 100%;
	color: #333;
	background-color: #ddd;
}

h1
{
	font-size: 1.5em;
	font-weight: normal;
	margin: 0;
}

pre
{
	height: 20em;
	font-family: monospace;
	font-size: 1em;
	padding: 2px 5px;
	color: #0f0;
	background-color: #111;
	border: 1px solid #030;
	border-radius: 4px;
	overflow: auto;
}

fieldset
{
	padding: 10px;
	border-radius: 10px;
}

label, input, button
{
	display: block;
	width: 80%;
	font-size: 1em;
	text-align: center;
	margin: 2px auto;
}

button
{
	width: 10em;
	font-weight: bold;
}
app.js:
// elements
var
body = document.body,
msgbox = document.getElementById("msgbox"),
log = document.getElementById("log");

// form submit handler
msgbox.addEventListener("submit", SendMessage, false);

// newMessage event subscribers
document.addEventListener("newMessage", newMessageHandler, false);
body.addEventListener("newMessage", newMessageHandler, false);
msgbox.addEventListener("newMessage", newMessageHandler, false);

// newMessage event handler
function newMessageHandler(e) {
	var _msg = "Event subscriber on " + e.currentTarget.nodeName + ", " +e.detail.time.toLocaleString() + ": " + e.detail.message;
	//console.log( _msg );
	LogEvent( _msg);
}

// new message: raise newMessage event
function SendMessage(e) {
 
 e.preventDefault();
 var msg = document.getElementById("msg").value.trim();
 
 if (msg && window.CustomEvent) {
  var event = new CustomEvent("newMessage", {
    detail : {
     message : msg,
     time : new Date(),
    },
    bubbles : true,
    cancelable : true
   });
  
  e.currentTarget.dispatchEvent(event);
 }
}

// log event in console
function LogEvent(msg) {
 log.textContent += msg + "\n";
 var ot = log.scrollHeight - log.clientHeight;
 if (ot > 0)
  log.scrollTop = ot;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值