Inline event vs AddEventListener
13910 ワード
movieAppのページング中にclickイベントをinline形式で追加するのを見ました.その時、インラインと既存のAddEventの違いを考えていたので、検索を始めました.
inline
inline
まず、イベントをオンラインで登録する方法は2つあります.// code 1
<button onclick="btnClick()">Click Me</button>
<script>
function btnClick() {
console.log("Button Clicked")
}
</script>
// code 2
<button id="myBtn">Click Me</button>
<script>
var btn = document.getElementById("myBtn")
btn.onclick = btnClick
function btnClick() {
console.log("Button Clicked")
}
</script>
1つ目の方法はHTMLタグに直接登録し、2つ目の方法はJSでonClickメソッドを使用してタグに識別を提供して登録することです.AddEventとして登録する方法は本来基本ですが、ここでは省略します.
差異
1.上書き
インラインが上書きされます.そのため、各種イベントの登録はできません.逆にaddEventは重複するイベントを登録することができます.<button id="btn1">Button 1</button>
<button id="btn2">Button 2</button>
<script>
function function1() {
console.log("Function1")
}
function function2() {
console.log("Function2")
}
function function3() {
console.log("Function3")
}
function function4() {
console.log("Function4")
}
var btn1 = document.getElementById("btn1")
var btn2 = document.getElementById("btn2")
btn1.onclick = function1
btn1.onclick = function2
btn2.addEventListener("click", function3, false)
btn2.addEventListener("click", function4, false)
</script>
inline
// Function2
addEvent
// Function3
// Function4
2. scope
HTML inlineを使用する場合、登録されたイベント関数はグローバル宣言後に実行する必要があります.逆にJS inlineやaddEventはグローバルでなくても構わない. <div
onclick="sayYourAddress('ulsan')"
id="pagination"
></div>
<script src="practice.js" type="module"></script>
import sayYourAddress from './practice2.js';
このようにコードを記述すると、クリックするとsayYourAddressは実行できません.jsがmoduleとして登録されているため、実際のものは何も利用できません.import sayYourAddress from './practice2.js';
function sayMyName(name) {
this.name = name;
this.say = () => {
alert(`Yes My name is ${this.name}`);
alert(sayYourAddress('ulsan'));
};
}
document.querySelector('#pagination').onclick = function () {
new sayMyName('yeong').say();
};
これでJS inlineが使えます.この場合、匿名関数にはコードが必要です.
特別な発見!
HTML inlineでは、関数スキャンがこのように使用できることがわかりました. <div onclick="function cool(cd){console.log(cd)} cool('cd')"></div>
div出力cd
をクリックします.onclickの空間はjsとされているようだ.
3. capture
AddEventの2番目のパラメータをtrueに設定すると、capture機能を使用できます.(HTMLからTARGETまでEVENTを実行)
しかし、利用可能な仕事はほとんどありません.
n/a.結論
HTMLインライン、JSインラインでイベントを登録するのは、範囲が限られていて、1つのイベントしか登録できず、可読性も悪いので、使用をお勧めせず、必要に応じて使用することもできます!
では、性能にはどのくらいの違いがあるのでしょうか.実験してみましょう.
ソース:https://dillionmegida.com/p/inline-events-vs-add-event-listeners/
Reference
この問題について(Inline event vs AddEventListener), 我々は、より多くの情報をここで見つけました
https://velog.io/@yhko1992/Inline-event-vs-AddEventListener
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
// code 1
<button onclick="btnClick()">Click Me</button>
<script>
function btnClick() {
console.log("Button Clicked")
}
</script>
// code 2
<button id="myBtn">Click Me</button>
<script>
var btn = document.getElementById("myBtn")
btn.onclick = btnClick
function btnClick() {
console.log("Button Clicked")
}
</script>
1.上書き
インラインが上書きされます.そのため、各種イベントの登録はできません.逆にaddEventは重複するイベントを登録することができます.
<button id="btn1">Button 1</button>
<button id="btn2">Button 2</button>
<script>
function function1() {
console.log("Function1")
}
function function2() {
console.log("Function2")
}
function function3() {
console.log("Function3")
}
function function4() {
console.log("Function4")
}
var btn1 = document.getElementById("btn1")
var btn2 = document.getElementById("btn2")
btn1.onclick = function1
btn1.onclick = function2
btn2.addEventListener("click", function3, false)
btn2.addEventListener("click", function4, false)
</script>
inline
// Function2
addEvent
// Function3
// Function4
2. scope
HTML inlineを使用する場合、登録されたイベント関数はグローバル宣言後に実行する必要があります.逆にJS inlineやaddEventはグローバルでなくても構わない.
<div
onclick="sayYourAddress('ulsan')"
id="pagination"
></div>
<script src="practice.js" type="module"></script>
import sayYourAddress from './practice2.js';
このようにコードを記述すると、クリックするとsayYourAddressは実行できません.jsがmoduleとして登録されているため、実際のものは何も利用できません.import sayYourAddress from './practice2.js';
function sayMyName(name) {
this.name = name;
this.say = () => {
alert(`Yes My name is ${this.name}`);
alert(sayYourAddress('ulsan'));
};
}
document.querySelector('#pagination').onclick = function () {
new sayMyName('yeong').say();
};
これでJS inlineが使えます.この場合、匿名関数にはコードが必要です.特別な発見!
HTML inlineでは、関数スキャンがこのように使用できることがわかりました.
<div onclick="function cool(cd){console.log(cd)} cool('cd')"></div>
div出力cd
をクリックします.onclickの空間はjsとされているようだ.3. capture
AddEventの2番目のパラメータをtrueに設定すると、capture機能を使用できます.(HTMLからTARGETまでEVENTを実行)
しかし、利用可能な仕事はほとんどありません.
n/a.結論
HTMLインライン、JSインラインでイベントを登録するのは、範囲が限られていて、1つのイベントしか登録できず、可読性も悪いので、使用をお勧めせず、必要に応じて使用することもできます!
では、性能にはどのくらいの違いがあるのでしょうか.実験してみましょう.
ソース:https://dillionmegida.com/p/inline-events-vs-add-event-listeners/
Reference
この問題について(Inline event vs AddEventListener), 我々は、より多くの情報をここで見つけました
https://velog.io/@yhko1992/Inline-event-vs-AddEventListener
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(Inline event vs AddEventListener), 我々は、より多くの情報をここで見つけました https://velog.io/@yhko1992/Inline-event-vs-AddEventListenerテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol