ホームページ ウェブフロントエンド jsチュートリアル firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码_javascript技巧

firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码_javascript技巧

May 16, 2016 pm 07:14 PM
firefox ie イベント処理

在ie中,事件对象是作为一个全局变量来保存和维护的。 所有的浏览器事件,不管是用户触发的,还是其他事件, 都会更新window.event 对象。 所以在代码中,只要轻松调用 window.event 就可以轻松获取 事件对象, 再 event.srcElement 就可以取得触发事件的元素进行进一步处理在ff中, 事件对象却不是全局对象,一般情况下,是现场发生,现场使用,ff把事件对象自动传递给对应的事件处理函数。 在代码中,函数的第一个参数就是ff下的事件对象了。
以上是我个人对两个浏览器下的事件处理方法的粗浅理解,可能说得不是很明白,我写些代码来
详细说明一下

复制代码 代码如下:




<script> <BR>window.onload=function(){ <BR>document.getElementById("btn1").onclick=foo1 <BR>document.getElementById("btn2").onclick=foo2 <BR>document.getElementById("btn3").onclick=foo3 <BR>} <BR>function foo1(){ <BR>//ie中, window.event使全局对象 <BR>alert(window.event) // ie下,显示 "[object]" , ff下显示 "undefined" <BR>//ff中, 第一个参数自动从为 事件对象 <BR>alert(arguments[0]) // ie下,显示 "undefined", ff下显示 "[object]" <BR>} <BR>function foo2(e){ <BR>alert(window.event) // ie下,显示 "[object]" , ff下显示 "undefined" <BR>//注意,我从来没有给 foo2传过参数哦。 现在 ff自动传参数给 foo2, 传的参数e 就是事件对象了 <BR>alert(e) // ie下,显示 "undefined", ff下显示 "[object]" <BR>} <BR>function foo3(){ //同时兼容ie和ff的写法,取事件对象 <BR>alert(arguments[0] || window.event) // ie 和 ff下,都显示 "[object]" <BR>var evt=arguments[0] || window.event <BR>var element=evt.srcElement || evt.target //在 ie和ff下 取得 btn3对象 <BR>alert(element.id) // btn3 <BR>} <BR></script>

看到这里,我们似乎对 ie和ff的事件处理方式都已经理解了,并找到了解决的办法。
但是。。。。事情还没有结束。
看代码
复制代码 代码如下:


<script> <BR>function foo(){ <BR>alert(arguments[0] || window.event) <BR>} <BR></script>

很不幸,我们 foo给我们的结果是 undefined, 而不是期望的 object
原因在于 事件绑定的方式
onclick="foo()" 就是直接执行了, foo() 函数,没有任何参数的,
这种情况下 firefox没有机会传递任何参数给foo
而 btn.onclick=foo 这种情况, 因为不是直接执行函数,firefox才有机会传参数给foo
解决方法:
方法一:比较笨的方法,既然 firefox没有机会传参数,那么自己勤快点,自己传
复制代码 代码如下:


<script> <BR>function foo(){ <BR>alert(arguments[0] || window.event) <BR>var evt=arguments[0] || window.event <BR>var element=evt.srcElement || evt.target <BR>alert(element.id) <BR>} <BR></script>

方法二: 自动查找
复制代码 代码如下:


<script> <BR>function foo4(){ <BR>var evt=getEvent() <BR>var element=evt.srcElement || evt.target <BR>alert(element.id) <BR>} <BR>function getEvent(){ //同时兼容ie和ff的写法 <BR>if(document.all) return window.event; <BR>func=getEvent.caller; <BR>while(func!=null){ <BR>var arg0=func.arguments[0]; <BR>if(arg0){ <BR>if((arg0.constructor==Event || arg0.constructor ==MouseEvent) <BR>|| (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)){ <BR>return arg0; <BR>} <BR>} <BR>func=func.caller; <BR>} <BR>return null; <BR>} <BR></script>

方法二由 lostinet原创,我在其基础上有所改进, 原函数如下
复制代码 代码如下:

function SearchEvent()
{
//IE
if(document.all)
return window.event;
func=SearchEvent.caller;
while(func!=null)
{
var arg0=func.arguments[0];
if(arg0)
{
if(arg0.constructor==Event)
return arg0;
}
func=func.caller;
}
return null;
}

简单总结:
以上两个解决方法中,都正确处理 ff和ie下 的事件处理 (不管是onclick="foo()",方式还是 onclick=foo方式)
但是个人建议用 getEvent() 方法来统一处理 事件问题。
先写到这里,大家继续。。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu LinuxでFirefox Snapを削除するにはどうすればよいですか? Ubuntu LinuxでFirefox Snapを削除するにはどうすればよいですか? Feb 21, 2024 pm 07:00 PM

Ubuntu Linux で FirefoxSnap を削除するには、次の手順に従います。 ターミナルを開き、管理者として Ubuntu システムにログインします。次のコマンドを実行して FirefoxSnap をアンインストールします: sudosnapremovefirefox 管理者パスワードの入力を求められます。パスワードを入力し、Enter キーを押して確認します。コマンドの実行が完了するまで待ちます。完了すると、FirefoxSnap は完全に削除されます。これにより、Snap パッケージ マネージャー経由でインストールされた Firefox のバージョンが削除されることに注意してください。他の方法 (APT パッケージ マネージャーなど) を通じて別のバージョンの Firefox をインストールした場合は、影響を受けません。上記の手順を実行します

Internet Explorer で Edge が開く: MS Edge リダイレクトを停止する方法 Internet Explorer で Edge が開く: MS Edge リダイレクトを停止する方法 Apr 14, 2023 pm 06:13 PM

Internet Explorer が長い間人気がなくなってきたことは周知の事実ですが、Windows 11 の登場により現実が始まりました。 Edge は、将来的に IE を置き換えるのではなく、現在 Microsoft の最新オペレーティング システムのデフォルトのブラウザーとなっています。現時点では、引き続き Windows 11 で Internet Explorer を有効にすることができます。ただし、IE11 (最新バージョン) の正式な廃止日は 2022 年 6 月 15 日であり、時間は刻々と過ぎています。これを念頭に置くと、Internet Explorer が Edge を開くことがありますが、それが気に入らないことに気づいたかもしれません。では、なぜこのようなことが起こっているのでしょうか?存在する

win11でie11ブラウザが使えない場合はどうすればいいですか? (win11ではIEブラウザは使用できません) win11でie11ブラウザが使えない場合はどうすればいいですか? (win11ではIEブラウザは使用できません) Feb 10, 2024 am 10:30 AM

ますます多くのユーザーが win11 システムにアップグレードし始めています。各ユーザーの使用習慣が異なるため、多くのユーザーは依然として ie11 ブラウザーを使用しています。では、win11 システムで ie ブラウザーを使用できない場合はどうすればよいでしょうか? Windows11はIE11をまだサポートしていますか?解決策を見てみましょう。 win11でie11ブラウザが使えない問題の解決策 1. まず、スタートメニューを右クリックし、「コマンドプロンプト(管理者)」を選択して開きます。 2. 開いたら、「Netshwinsockreset」と直接入力し、Enter キーを押して確定します。 3. 確認後、「netshadvfirewallreset&rdqu」と入力します。

Python GUI プログラミング: インタラクティブなインターフェイスを素早く簡単に作成できます。 Python GUI プログラミング: インタラクティブなインターフェイスを素早く簡単に作成できます。 Feb 19, 2024 pm 01:24 PM

Python GUIプログラミングの簡単な紹介 GUI (Graphical User Interface、グラフィカル ユーザー インターフェイス) は、ユーザーがコンピュータとグラフィカルに対話できるようにする方法です。 GUI プログラミングとは、プログラミング言語を使用してグラフィカル ユーザー インターフェイスを作成することを指します。 Python は、豊富な GUI ライブラリを提供する人気のプログラミング言語であり、Python GUI プログラミングを非常に簡単にします。 Python GUI ライブラリの概要 Python には多くの GUI ライブラリがあり、最も一般的に使用されるものは次のとおりです: Tkinter: Tkinter は、Python 標準ライブラリに付属する GUI ライブラリで、シンプルで使いやすいですが、機能が限られています。 PyQt: PyQt は、強力な機能を備えたクロスプラットフォーム GUI ライブラリです。

C++ でイベントの完全な循環キューを管理するにはどうすればよいですか? C++ でイベントの完全な循環キューを管理するにはどうすればよいですか? Sep 04, 2023 pm 06:41 PM

はじめに CircularQueue は線形キューを改良したもので、線形キューのメモリ浪費の問題を解決するために導入されました。循環キューは、FIFO 原理を使用して要素を挿入および削除します。このチュートリアルでは、循環キューの操作とその管理方法について説明します。循環キューとは何ですか?循環キューは、フロントエンドとバックエンドが相互に接続されたデータ構造の別のタイプのキューです。循環バッファとも呼ばれます。これは線形キューと同様に動作しますが、なぜデータ構造に新しいキューを導入する必要があるのでしょうか?線形キューを使用する場合、キューがその上限に達すると、末尾ポインターの前にいくらかのメモリ領域が存在する可能性があります。これによりメモリの損失が発生するため、優れたアルゴリズムではリソースを最大限に活用できる必要があります。メモリの無駄を解決するには

mozilla Firefox はアンインストールできますか? mozilla Firefox はアンインストールできますか? Mar 15, 2023 pm 04:40 PM

Mozilla Firefox はアンインストールできます。Firefox はサードパーティのブラウザなので、不要な場合はアンインストールできます。アンインストール方法: 1. [スタート] メニューで、[Windwos システム] - [コントロール パネル] をクリックします; 2. [コントロール パネル] インターフェイスで、[プログラムと機能] をクリックします; 3. 新しいインターフェイスで、[プログラムと機能] をクリックします。 Firefox ブラウザ アイコン; 4. アンインストール ポップアップ ウィンドウで、[次へ] をクリックします; 5. [アンインストール] をクリックします。

Win10でIEを開いた時のEdgeへの自動ジャンプを解除する方法_IEブラウザページの自動ジャンプの解決方法 Win10でIEを開いた時のEdgeへの自動ジャンプを解除する方法_IEブラウザページの自動ジャンプの解決方法 Mar 20, 2024 pm 09:21 PM

最近、多くの win10 ユーザーが、コンピューターのブラウザーを使用するときに、IE ブラウザーが常に自動的にエッジ ブラウザーにジャンプすることに気付きました。このサイトでは、win10でIEを開いたときに自動的にエッジにジャンプして閉じる方法をユーザーに丁寧に紹介しましょう。 1. Edge ブラウザにログインし、右上隅にある [...] をクリックして、ドロップダウン設定オプションを探します。 2. 設定を入力したら、左側の列の「デフォルトのブラウザ」をクリックします。 3. 最後に、互換性で、Web サイトが IE モードで再ロードされないようにチェックボックスをオンにし、IE ブラウザを再起動します。

時代の終わり: Internet Explorer 11 は廃止されました。知っておくべきことは次のとおりです。 時代の終わり: Internet Explorer 11 は廃止されました。知っておくべきことは次のとおりです。 Apr 20, 2023 pm 06:52 PM

2022 年 6 月 15 日は、Microsoft が Internet Explorer 11 (IE11) のサポートを終了し、レガシー ブラウザーの章を閉じる日です。同社はしばらくの間、このサポート終了日をユーザーに通知し、Microsoft Edge への移行を計画するよう呼び掛けてきました。 Microsoft は、Windows の最新のデフォルト Web ブラウザとして IE11 を Windows 8.1 にバンドルしています。 Chrome の(現在の)高さには決して達しませんでしたが、2014 年には IE8 に次いで 2 番目に使用されたデスクトップ ブラウザーでした。もちろん20個でも

See all articles