JavaScript Event学习第三章 早期的事件处理程序_javascript技巧
这些古老的浏览器只支持一种注册事件处理程序的方法,这个方法是Netscape发明的。因为Netscape先发制人,所以如果微软也想做支持JavaScript事件的浏览器就得跟着Netscape走,所以这里没有兼容性的问题。所以这种模式在任何支持JavaScript的浏览器都能运行---除了Mac上的IE3,他根本就不支持事件。
注册事件处理程序
在内联式的事件注册模型中,事件处理程序就像是一个HTML元素的属性,比如:
当这个链接上发生单击事件的时候,事件处理程序就被触发然后执行你的脚本:一个警告对话框弹出。你也可以触发一个JavaScript函数:
上面两个例子里面事件的名字的大小写只是一个习惯问题,HTML是大小写不敏感的,所以你想怎么写都可以。XHTML要求所有的属性名称必须都是小写,所以如果你使用的XHTML那么名字就要写成onclick。
不要用他
虽然这种内联型的注册模型很古老也很可靠,但是他有一个不足。他要求你在XHTML结构层里面写上本不属于这里的JavaScript代码。
所以我强烈建议你不要使用这种方法。在这里我有详细的解释。
理解这些旧的模型对于JavaScript事件处理的全局感有很大帮助,但是你最好还是使用我后面说明的现代模式。
默认动作
当年Netscape设置了默认动作也有怎样防止默认动作运行。他的模式拯救了浏览器大战和标准的制定,而且到如今都很好的运行着。
众所周知,当用户点击了一个链接浏览器就会按照href的属性加载页面。这是链接上的默认动作。但是当你定义了一个onclick事件处理程序了以后会发生什么呢?应该能被执行,但是什么时候呢?
如果在这个链接上单击,那么事件处理程序一定会被首先执行。毕竟当默认动作发生--新页面加载--旧的页面包括事件处理程序本身都会从内存中清除。如果onclick的事件处理程序执行了,那么一定是在默认动作之前。
这就有了一个非常重要的原理。如果一个事件同时触发了默认动作和事件处理程序,那么:
、事件处理程序会首先执行
、默认动作随后执行
所以在上面的例子中,doSomething()会首先执行,然后浏览器会打开链接。
阻止默认事件
当这些都确定之后,大家大多开始考虑如何阻止默认事件。在我们的例子中就可以阻止浏览器打开新的页面。
所以事件处理程序可以返回一个布尔值(ture或者false),false的含义就是“不要进行默认动作”。这样我们就可以把例子改成:
这个链接就不会跟着执行了。这个函数执行之后程序返回false,告诉浏览器不要执行默认动作。
有时候有必要让函数决定什么时候该执行什么时候不该执行默认动作。所以我们可以把例子改成:
这就是(非常简单的)用户交互。用户会被问一个问题,如果回答是肯定的那么函数返回true,如果取消了那么久返回一个false。这个返回值会被事件处理程序捕获,然后转给事件本身。如果是flase那么默认动作就不会被执行--链接不会进入。
然而,不是所有的默认动作都能被阻止。比如unload事件就不行。假设用户关闭浏览器窗口--触发了unload事件。如果你能阻止关闭窗口,那么窗口会违背用户的意愿而一直打开着么?当然不会。
你可以试试微软的beforeunload属性来阻止unload。与其制造一个非常混乱的情况让用户来选择确认这个行为。那不如不用。
返回false来阻止默认动作是所有浏览器都支持的这是事件处理程序的基本组成。如今的事件处理程序模型还添加了一些新的方法来阻止默认动作:
W3C给事件添加了preventDefalut()方法。如果你引用了这个方法那么默认动作就会被阻止。
微软给事件添加了returnValue属性。如果你设置他的值为false那么默认动作也会被阻止。
但是用不着这些个,简单的返回false就够了。
window.status
这里对于返回false有一个例外。当你设置鼠标经过链接的时候改变窗口的状态栏以后,你还想阻止默认动作--在状态栏显示链接地址--的时候,你就应该返回true:
如果你不这样做,那么代码就不会工作。没人知道那是怎么回事,就是一个比较怪异的事情。
this
在JavaScript里this关键字通常指函数的所有者。如果this指向事件发生的HTML元素,那么一切都是那么的美好,你可以很简单的做很多事情。
不幸的是,虽然this非常的强大,但是如果你不是明确的知道他怎么运作的话使用起来还是比较难的。关于这个我在另一个地方有详细的讨论,在这我在内联模式下做一些概述。
在内联模式下你可以将this作为一个事件处理程序函数的一个参数。所以你可以:
你给函数传递了一个引用,存储在obj里面。现在你不需要在遍历文档寻找是哪个元素被点击了:他很安全的存储在变量obj里面。现在你就可以:
function doSomething(obj)
{
var linkTo = obj.href;
return confirm('Do you really want to follow the link to ' + linkTo + '?')
}
函数接受到一个链接的引用存储在obj里面。现在你可以读取这个链接的链接地址然后进行确认。你可以把这个技巧运用在任何一个链接上:他总是会显示你刚才点击的那个链接的真实地址。
继续
如果需要继续学习,请看下一章。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

pythonGUI程式設計簡述GUI(GraphicalUserInterface,圖形使用者介面)是一種允許使用者透過圖形方式與電腦互動的方式。 GUI程式設計是指使用程式語言來創建圖形使用者介面。 Python是一種流行的程式語言,它提供了豐富的GUI函式庫,使得PythonGUI程式設計變得非常簡單。 PythonGUI函式庫介紹Python中有許多GUI函式庫,其中最常用的有:Tkinter:Tkinter是Python標準函式庫中自帶的GUI函式庫,它簡單易用,但功能有限。 PyQt:PyQt是一個跨平台的GUI函式庫,它功能強大,

介紹CircularQueue是線性佇列的改進,它被引入來解決線性佇列中的記憶體浪費問題。循環佇列使用FIFO原則來插入和刪除其中的元素。在本教程中,我們將討論循環隊列的操作以及如何管理它。什麼是循環隊列?循環隊列是資料結構中的另一個隊列,其前端和後端相互連接。它也被稱為循環緩衝區。它的操作與線性隊列類似,那麼為什麼我們需要在資料結構中引入一個新的隊列呢?使用線性佇列時,當佇列達到其最大限制時,尾指標之前可能會存在一些記憶體空間。這會導致記憶體損失,而良好的演算法應該能夠充分利用資源。為了解決記憶體浪費

PHP8.0中的事件處理庫:Event隨著互聯網的不斷發展,PHP作為一門流行的後台程式語言,被廣泛應用於各種Web應用程式的開發中。在這個過程中,事件驅動機製成為了非常重要的一環。 PHP8.0中的事件處理函式庫Event將為我們提供一個更有效率和彈性的事件處理方式。什麼是事件處理在網路應用程式的開發中,事件處理是一個非常重要的概念。事件可以是任何一種使用者行

Steam 的夏季特賣此前曾舉辦過一些最優惠的遊戲折扣,而今年 Valve 似乎又迎來了另一場全壘打。剛剛發布了一段預告片(請參見下文),其中展示了一些 Steam 夏季特賣折扣遊戲。

冒泡事件是指在網路開發中,當一個元素上觸發了某個事件後,該事件將會向上層元素傳播,直到達到文檔根元素。這種傳播方式就像氣泡從底部逐漸冒上來一樣,因此被稱為冒泡事件。在實際開發中,了解並理解冒泡事件的工作原理對於正確處理事件十分重要。以下將透過具體的程式碼範例來詳細介紹冒泡事件的概念和使用方法。首先,我們建立一個簡單的HTML頁面,其中包含一個父級元素和三個子

Vue中的v-on指令解析:如何處理表單提交事件在Vue.js中,v-on指令用於綁定事件監聽器,可以擷取並處理各種DOM事件。其中,處理表單提交事件是Vue中常見的操作之一。本文將介紹如何使用v-on指令處理表單提交事件,並提供具體的程式碼範例。首先,需要明確Vue中的表單提交事件指的是當使用者點擊submit按鈕或按下回車鍵時觸發的事件。在Vue中,可以透過

在Vue中常常會有一些元件嵌套的情況,而這些嵌套的元件之間需要進行事件的傳遞。在Vue中,使用了$emit事件來進行元件之間的事件通訊。但是,在某些情況下,我們需要將一個父元件的事件處理函數傳遞給巢狀的子元件,這時候,使用$emit事件就不太合適了。這時候,可以使用Vue提供的$listeners來進行事件處理函數的傳遞。那麼,什麼是$listeners呢?

深入研究PHP和Vue在腦圖功能中的關鍵程式碼實作摘要:本文將深入探討PHP和Vue在實作腦圖功能中的關鍵程式碼實作。腦圖是一種常用於展示思考結構和關聯關係的圖形工具,被廣泛應用於專案規劃、知識管理和資訊整理等領域。透過學習PHP和Vue的相關知識,我們可以實現一個簡單且功能強大的腦圖應用。了解PHPPHP是一種常用的伺服器端腳本語言。它具有簡單易學、可擴展性強
