http://www.jb51.net/article/15557.htm
首先是最常规的方法:
程序代码
<p id="para" title="cssrain demo!" onclick="test()" >test</p>
<script>
function test(){
alert("test");
}
</script>
当某一天,我们知道JavaScript要跟HTML结构实现分离后,就会改了一种写法:
程序代码
<p id="para" title="cssrain demo!">test</p>
<script>
function test(){
alert("test");
}
window.onload = function(){
document.getElementById("para").onclick = test;
}
</script>
当我们工作越来越久后,有时候我们需要对某个元素绑定多个相同的事件类型:
程序代码
<p id="para" title="cssrain demo!">test</p>
<script>
function test(){
alert("test");
}
function pig(){
alert("pig");
}
window.onload = function(){
document.getElementById("para").onclick = test;
document.getElementById("para").onclick = pig;
}
</script>
如果按照上面的写法,我们只能输出第二个函数。
这时候我们需要用到attachEvent方法:
程序代码
<p id="para" title="cssrain demo!">test</p>
<script>
function test(){
alert("test");
}
function pig(){
alert("pig");
}
window.onload = function(){
document.getElementById("para").attachEvent("onclick",test);
document.getElementById("para").attachEvent("onclick",pig);
}
</script>
在一段时间内,你并没发现这段代码有任何错误。
某一天,一个名叫firefox的浏览器 闯入你的视野,当我们把这段代码放到firefox中执行后,
发现并不能正常运行。 问题就这样,越来越多,然而作为一名JS程序员,这些都是必须面对的。
为了解决这段代码的平台兼容性问题,我翻翻手册,知道了firefox跟ie的区别:
firefox中注册事件使用:addEventListener方法,同时为了兼容ie,我们必须用到if ... else...
程序代码
<p id="para" title="cssrain demo!">test</p>
<script>
function test(){
alert("test");
}
function pig(){
alert("pig");
}
window.onload = function(){
var element = document.getElementById("para");
if(element.addEventListener){ // firefox , w3c
element.addEventListener("click",test,false);
element.addEventListener("click",pig,false);
} else { // ie
element.attachEvent("onclick",test);
element.attachEvent("onclick",pig);
}
}
</script>
此时,代码就可以在多个平台上工作了。
但随着水平的进步,你不满足每次都去判断,你想把这个判断封装起来,以后可以直接调用:
程序代码
<p id="para" title="cssrain demo!">test</p>
<script>
function test(){
alert("test");
}
function pig(){
alert("pig");
}
function addListener(element,e,fn){
if(element.addEventListener){
element.addEventListener(e,fn,false);
} else {
element.attachEvent("on" + e,fn);
}
}
window.onload = function(){
var element = document.getElementById("para");
addListener(element,"click",test);
addListener(element,"click",pig);
}
</script>
至此,作为一个程序员的工作就完了。
中间我们从一个最传统,最基本的写法 , 然后实现Js和HTML的分离,然后又实现对同一个元素注册多个事件,期间,我们发现注册事件的兼容性问题。最后我们对注册事件的方法进行封装,方便以后使用。
分享到:
相关推荐
本文主要探讨了如何使用JavaScript来监听和处理鼠标滚轮事件,并考虑到不同浏览器的兼容性问题。具体内容包括了滚轮事件监听的原理、不同浏览器下的事件差异、事件监听的代码实现以及如何在不同浏览器中判断滚轮滚动...
2. **DOM事件**:当DOM事件触发时,可以注册回调函数进行处理。 3. **setTimeout和setInterval**:这两个函数的延迟执行特性使得它们成为回调函数的经典应用场景,特别是当延迟时间为0时,用于模拟微任务的执行。 4....
这里操作实际会让用户授权页面开启麦克风,如果用户允许的话,用户可以开始说话了,如果你停说话了,onresult注册的时间 则会被触发,并会讲捕获的音频返回成一个JavaScript对象。 二、响应流 你需要等待用户准备好...
4. v-for的ref现在不会注册为数组,而是作为独立引用。 5. 生命周期钩子`destroyed`和`beforeDestroy`分别被重命名为`unmounted`和`beforeUnmount`,以更准确地反映其功能。 6. `<template>`标签现在被视为普通元素...
JavaScript调用Flex方法的步骤首先是注册Flex中的AS方法为可被JavaScript调用。这通过`ExternalInterface.addCallback`完成: ```xml <![CDATA[ import flash.external.ExternalInterface; public function ...
在JavaScript代码中注册事件监听器,需要使用`addEventListener`方法,而非`attachEvent`方法。`attachEvent`方法主要用于IE浏览器,而`addEventListener`方法则广泛应用于其他现代浏览器,包括Mozilla系列。`...
Promise的核心在于它的then方法,它允许我们注册一组回调函数来处理不同的状态。`promise.then`接受两个参数,第一个参数是处理成功的回调,第二个参数是处理错误的回调。例如: ```javascript promise.then...
每个事件对应一个主题(Subject),而所有注册到这个事件上的处理函数则相当于观察者(Observer)。Node.js 内置了多个事件,通过引入 events 模块并实例化 EventEmitter 类,开发者可以轻松地创建事件和绑定监听器。...
为了解决这个问题,我们可以将 Axios 全局注册到 Vue 的原型上,使得在任何组件中都可以直接调用 Axios。 首先,我们来看如何实现这个过程。在项目的入口文件,通常是 `main.js`,我们需要引入 Vue 和 Axios: ```...
Node.js 旅游网站设计浅析 Node.js 是一个基于 JavaScript 的服务器端 runtime 环境,最近几年来, Node.js 技术已经得到广泛应用, Node.js 的异步非阻塞 I/O 处理机制,使其在网站开发中具有显著的优势。本文将...
Node.js是基于Chrome V8引擎的JavaScript运行环境,它使用事件驱动、非阻塞I/O模型,非常适合构建可扩展的网络应用。在Node.js中,http模块用于处理HTTP服务器端和客户端的逻辑。http.ServerResponse对象代表了一个...
在组件化开发中,我们可以定义自己的组件,这些组件可以通过 `components` 选项注册到 Vue 实例。例如,局部组件的创建方式如下: ```html <haha></haha> ``` ```javascript let vm = new Vue({ el: "#app", ...
在AngularJS中,拦截器是通过服务工厂注册到`$httpProvider`的`interceptors`数组中的。以下是一个简单的示例: ```javascript angular.module("myApp", []) .factory('httpInterceptor', ['$q', '$injector', ...
"浅析Vue Component 组件使用" Vue Component 组件是 Vue.js 框架中的一种核心概念,它允许开发者将用户界面拆分成小的、可重用的部分,使得代码更加模块化和易于维护。下面是对 Vue Component 组件使用的详细分析...
在页面加载时,使用`AjaxPro.Utility.RegisterTypeForAjax`方法注册当前页面对象的类型。这样做可以在前端生成对应的脚本,使得页面对象的方法能够被异步调用。示例代码如下: ```csharp protected void Page_Load...
这是因为`onload`事件覆盖了`document.ready`,除非你正确管理这些事件的注册。 总结来说,`document.ready`和`window.onload`是两种处理页面加载的不同策略。理解它们的区别并根据实际需求选择合适的方法,对于...