jQuery.click () vs onClick


558

ฉันมีแอพพลิเคชั่นขนาดใหญ่ jQuery และฉันใช้สองวิธีต่อไปนี้สำหรับการคลิกเหตุการณ์

วิธีแรก

HTML

<div id="myDiv">Some Content</div>

jQuery

$('#myDiv').click(function(){
    //Some code
});

วิธีที่สอง

HTML

<div id="myDiv" onClick="divFunction()">Some Content</div>

การเรียกใช้ฟังก์ชัน JavaScript

function divFunction(){
    //Some code
}

ฉันใช้วิธีแรกหรือวิธีที่สองในแอปพลิเคชันของฉัน อันไหนดีกว่า? ดีกว่าสำหรับประสิทธิภาพ? และมาตรฐาน?


9
คุณสามารถเรียนรู้เกี่ยวกับวิธีการต่างๆที่จะแนบตัวจัดการเหตุการณ์และข้อได้เปรียบของพวกเขา / ข้อเสียที่นี่: quirksmode.org/js/introevents.html jQuery เป็นเพียง wrapper ที่ดีสำหรับการลงทะเบียนเหตุการณ์ขั้นสูง
เฟลิกซ์คลิง

12
อย่าลืมใส่ฟังก์ชั่นคลิกใน $ (เอกสาร).
ready

คำตอบ:


559

ใช้$('#myDiv').click(function(){เป็นที่ดีกว่าในขณะที่มันเป็นไปตามรูปแบบการลงทะเบียนเหตุการณ์มาตรฐาน (jQuery ใช้ภายในaddEventListenerและattachEvent)

โดยทั่วไปการลงทะเบียนเหตุการณ์ด้วยวิธีการที่ทันสมัยเป็นวิธีที่ไม่สร้างความรำคาญในการจัดการเหตุการณ์ นอกจากนี้ในการลงทะเบียนมากกว่าหนึ่งฟังเหตุการณ์สำหรับเป้าหมายที่คุณสามารถโทรaddEventListener()หาเป้าหมายเดียวกัน

var myEl = document.getElementById('myelement');

myEl.addEventListener('click', function() {
    alert('Hello world');
}, false);

myEl.addEventListener('click', function() {
    alert('Hello world again!!!');
}, false);

http://jsfiddle.net/aj55x/1/

ทำไมต้องใช้ addEventListener (จาก MDN)

addEventListener เป็นวิธีการลงทะเบียนฟังเหตุการณ์ตามที่ระบุใน W3C DOM มันมีประโยชน์ดังนี้:

  • อนุญาตให้เพิ่มมากกว่าตัวจัดการเดียวสำหรับเหตุการณ์ สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับไลบรารี DHTML หรือส่วนขยาย Mozilla ที่จำเป็นต้องใช้งานได้ดีแม้ว่าจะใช้งานไลบรารี / ส่วนขยายอื่น ๆ
  • มันช่วยให้คุณควบคุมเฟสอย่างละเอียดยิ่งขึ้นเมื่อผู้ฟังเปิดใช้งาน (การจับภาพกับการเดือดปุด ๆ )
  • มันทำงานได้กับองค์ประกอบ DOM ใด ๆ ไม่เพียง แต่องค์ประกอบ HTML

เพิ่มเติมเกี่ยวกับการลงทะเบียนเหตุการณ์สมัยใหม่ -> http://www.quirksmode.org/js/events_advanced.html

วิธีอื่น ๆ เช่นการตั้งค่าคุณลักษณะ HTMLตัวอย่าง:

<button onclick="alert('Hello world!')">

หรือคุณสมบัติองค์ประกอบ DOMตัวอย่าง:

myEl.onclick = function(event){alert('Hello world');}; 

เก่าและสามารถเขียนทับได้ง่าย

ควรหลีกเลี่ยงแอตทริบิวต์ HTMLเนื่องจากทำให้มาร์กอัปมีขนาดใหญ่ขึ้นและอ่านได้น้อยลง ความกังวลเกี่ยวกับเนื้อหา / โครงสร้างและพฤติกรรมนั้นไม่ได้แยกจากกันทำให้เกิดข้อผิดพลาดในการค้นหา

ปัญหาเกี่ยวกับวิธีการคุณสมบัติองค์ประกอบ DOMคือตัวจัดการเหตุการณ์หนึ่งตัวเท่านั้นที่สามารถเชื่อมโยงกับองค์ประกอบต่อเหตุการณ์

เพิ่มเติมเกี่ยวกับการจัดการเหตุการณ์แบบดั้งเดิม -> http://www.quirksmode.org/js/events_tradmod.html

การอ้างอิง MDN: https://developer.mozilla.org/en-US/docs/DOM/event


13
ให้บอกว่าคุณเรียกใช้$('#myDiv').click(function(){รหัสก่อนจากนั้นคุณสร้าง HTML 20 แถวจาก JavaScript แบบไดนามิกและแต่ละแถวมีปุ่มที่ว่าเมื่อคลิก JavaScript จะต้องใช้ฟังก์ชั่นเดียวกันนั้น หากคุณทำสิ่งนี้ก่อนจะไม่สามารถทำงานได้เนื่องจากมีการเพิ่มตัวจัดการเหตุการณ์ก่อนสร้าง HTML ดูเหมือนง่ายกว่าที่จะใส่onclick="functionName()"ลงใน HTML ที่สร้างขึ้นแบบไดนามิกจากนั้นปุ่มจะทำงานทันที หรือคุณรู้วิธีแก้ปัญหาที่สง่างามกว่าสำหรับสถานการณ์นี้หรือไม่?
zuallauz

17
@zuallauz สำหรับกรณีนั้น jQuery มี.delegate()ฟังก์ชัน มันจะแนบกิจกรรมกับองค์ประกอบใด ๆ ที่จะปรากฏขึ้นในอนาคตบนเว็บไซต์
Zefiryn

17
@SimonRobb .liveเลิกใช้แล้ว ใช้.delegateสำหรับรุ่นที่เก่ากว่าหรือใช้.onสำหรับ jQuery รุ่นที่ใหม่กว่า
Selvakumar Arumugam

4
@Vega คะแนนที่ดี สิ่งที่เกี่ยวกับการอ่าน? ตอนนี้คุณต้องค้นหาไฟล์ JS ที่อ้างอิงทั้งหมดในหน้าเพื่อดูตัวจัดการการคลิกทั้งหมดขององค์ประกอบตาม ID ขององค์ประกอบแทนการค้นหาชื่อฟังก์ชั่น คุณทำอะไรกับเรื่องนี้?
supertonsky

6
ฉันเห็นด้วยกับ @supertonsky ฉันไม่เห็นด้วยอย่างยิ่งว่า $ ('# myDiv') คลิก (ฟังก์ชั่น () {ดีกว่าในแอพพลิเคชั่นจาวาสคริปต์ขนาดใหญ่ที่มีผลผูกพันกับเหตุการณ์กลายเป็นเรื่องยากมากในการค้นหาการอ้างอิงทั้งหมดที่เชื่อมโยงกับเป้าหมาย , id, เด็กอ้างอิงถึงแท็ก html และจะเกิดอะไรขึ้นหาก css การเปลี่ยนแปลงและชื่อคลาสที่คุณต้องการจะเปลี่ยนในประสบการณ์ของฉันที่ทำงานกับโค้ดอื่น ๆ มันจะน่าเกลียดมากอย่างรวดเร็ว
Jon

65

เพื่อประสิทธิภาพที่ดีขึ้นให้ใช้ JavaScript ดั้งเดิม เพื่อการพัฒนาที่รวดเร็วยิ่งขึ้นให้ใช้ jQuery ตรวจสอบการเปรียบเทียบผลการดำเนินงานที่jQuery VS สมรรถนะของธาตุพื้นเมือง

ฉันได้ทำการทดสอบใน Firefox 16.0 32 บิตบน Windows Server 2008 R2 / 7 64 บิตแล้ว

$('span'); // 6,604 operations per second
document.getElementsByTagName('span'); // 10,331,708 operations/sec

สำหรับเหตุการณ์การคลิกให้ตรวจสอบเหตุการณ์เบราว์เซอร์เนทีฟเทียบกับทริกเกอร์ jqueryหรือjQuery กับการคลิกที่การเชื่อมโยงเหตุการณ์เนทิฟ

การทดสอบใน Chrome 22.0.1229.79 32 บิตบน Windows Server 2008 R2 / 7 64- บิต

$('#jquery a').click(window.testClickListener); // 2,957 operations/second

[].forEach.call( document.querySelectorAll('#native a'), function(el) {
    el.addEventListener('click', window.testClickListener, false);
}); // 18,196 operations/second

9
jQuery ควรจะสามารถทำงานในสภาพแวดล้อมที่แตกต่างกันซึ่งทำให้ robuts มากขึ้นและง่ายต่อการเขียนบำรุงรักษา แต่ถ้าความเร็วเป็นสิ่งสำคัญที่สุด jQuery ไม่ใช่คำตอบ
Coops

ระวังเมื่อใช้ forEach เพราะเบราว์เซอร์ไม่รองรับทุกอย่างฉันคิดว่าไม่ใช่สำหรับ IE เช่นกัน อาจจะเป็นประโยชน์ polyfill
khaled_webdev

39

จากสิ่งที่ฉันเข้าใจคำถามของคุณไม่เกี่ยวกับว่าจะใช้ jQuery หรือไม่ มันค่อนข้าง: มันจะดีกว่าที่จะผูกเหตุการณ์แบบอินไลน์ใน HTML หรือผ่านผู้ฟังเหตุการณ์?

การรวมแบบอินไลน์ถูกคัดค้าน ยิ่งไปกว่านั้นวิธีนี้คุณสามารถผูกฟังก์ชันเดียวกับเหตุการณ์บางอย่างได้เท่านั้น

ดังนั้นฉันขอแนะนำให้ใช้ฟังเหตุการณ์ ด้วยวิธีนี้คุณจะสามารถผูกฟังก์ชั่นมากมายกับเหตุการณ์เดียวและยกเลิกการผูกไว้ในภายหลังหากจำเป็น พิจารณาโค้ด JavaScript บริสุทธิ์นี้:

querySelector('#myDiv').addEventListener('click', function () {
    // Some code...
});

สิ่งนี้ใช้ได้กับเบราว์เซอร์ที่ทันสมัยที่สุด

อย่างไรก็ตามหากคุณมี jQuery อยู่ในโครงการแล้ว - ใช้ jQuery: .onหรือ.clickfunction


เป็นไปได้ที่จะลงทะเบียนฟังก์ชั่นหลาย ๆ อย่างโดยใช้ HTML แบบอินไลน์เช่น <div onclick = "handler1 (); handler2 (); handler3 ();"> </div>
คิระ

2
วิธีนี้คุณยังคงลงทะเบียน "expression" เพียงหนึ่งรายการเท่านั้น ตัวอย่างเช่นหากhandler1เกิดข้อผิดพลาดhandler2และhandler3จะไม่ถูกเรียก ยิ่งไปกว่านั้นคุณไม่สามารถเพิ่มและลบบางฟังก์ชั่นจากฟังได้ และสุดท้าย แต่ไม่น้อยhandler1, handler2และhandler3จะต้องมีการประกาศในขอบเขตทั่วโลกซึ่งเป็นกลิ่น
Michał Miszczyszyn

การใช้try..catchภายในฟังก์ชั่นจะไม่ทำงานเมื่อhandler2ไม่ได้กำหนด เห็นได้ชัดว่า JavaScript แบบอินไลน์ FYI ไม่ทำงานเมื่อ JS ถูกปิดการใช้งานในเบราว์เซอร์ของผู้ใช้โปรดอย่าเข้าใจผิดอื่น ๆ
Michał Miszczyszyn

ฉันพูดถึงว่าฉันไม่แน่ใจเกี่ยวกับ JavaScript ที่ปิดใช้งาน ฉันไม่ได้เข้าใจผิดหรือหลอกลวงผู้อื่น
Kira

ในกรณีดังกล่าวคุณสามารถลอง <div onclick = "function () {ลอง {handler1 (); handler2 (); handler3 (); handler3 ();} catch {}}"> </div>
Kira

15

คุณสามารถรวมพวกเขาใช้ jQuery เพื่อผูกฟังก์ชั่นการคลิก

<div id="myDiv">Some Content</div>

$('#myDiv').click(divFunction);

function divFunction(){
 //some code
}

14

$('#myDiv').clickจะดีกว่าเพราะมันแยกรหัส JavaScript จากHTML หนึ่งจะต้องพยายามที่จะให้หน้าพฤติกรรมที่แตกต่างกันและโครงสร้าง สิ่งนี้ช่วยได้มาก


2
คำตอบนี้สมเหตุสมผลสำหรับผู้ที่ออกแบบและเขียนข้อมูล js นั้นแตกต่างกันในกรณีส่วนใหญ่ และรู้สึกแปลก ๆ ที่จะยกเลิกการลงคะแนนนี้หลังจากผ่านไปเกือบ 4 ปีนับตั้งแต่มีการโพสต์ข้อความนี้ !!
LearningEveryday

14

ไปสำหรับสิ่งนี้เพราะมันจะให้ทั้งมาตรฐานและประสิทธิภาพ

 $('#myDiv').click(function(){
      //Some code
 });

ในขณะที่วิธีที่สองคือรหัส JavaScript ที่ง่ายและเร็วกว่า jQuery แต่ประสิทธิภาพที่นี่จะใกล้เคียงกัน


11

IMHO, onclick เป็นวิธีการที่ต้องการมากกว่าคลิกเฉพาะเมื่อตรงตามเงื่อนไขต่อไปนี้:

  • มีองค์ประกอบมากมายในหน้า
  • มีเหตุการณ์เดียวเท่านั้นที่จะลงทะเบียนสำหรับเหตุการณ์คลิก
  • คุณกังวลเกี่ยวกับประสิทธิภาพของมือถือ / แบตเตอรี่

ฉันสร้างความคิดเห็นนี้เนื่องจากความจริงที่ว่าเอนจิ้น JavaScript บนอุปกรณ์มือถือนั้นช้ากว่ารุ่นเดสก์ท็อปของพวกเขาถึง 4 ถึง 7 เท่าซึ่งสร้างขึ้นในรุ่นเดียวกัน ฉันเกลียดเมื่อฉันเยี่ยมชมเว็บไซต์บนอุปกรณ์มือถือของฉันและได้รับการเลื่อนแบบกระวนกระวายใจเพราะ jQuery ผูกพันเหตุการณ์ทั้งหมดโดยเสียค่าใช้จ่ายจากประสบการณ์การใช้งานและอายุการใช้งานแบตเตอรี่ของฉัน ปัจจัยสนับสนุนล่าสุดเมื่อไม่นานมานี้แม้ว่าจะน่ากังวลกับหน่วยงานของรัฐเท่านั้น) เรามี IE7 ป๊อปอัปพร้อมกล่องข้อความระบุว่ากระบวนการ JavaScript ใช้เวลานาน ... รอหรือยกเลิกกระบวนการ สิ่งนี้เกิดขึ้นทุกครั้งที่มีองค์ประกอบมากมายที่ต้องผูกผ่าน jQuery


10

ความแตกต่างในงาน หากคุณใช้คลิก () คุณสามารถเพิ่มฟังก์ชั่นได้หลายฟังก์ชั่น แต่ถ้าคุณใช้แอททริบิวจะมีการใช้งานฟังก์ชั่นเดียวเท่านั้น

การสาธิต

HTML

<span id="JQueryClick">Click #JQuery</span> </br>
<span id="JQueryAttrClick">Click #Attr</span> </br>

JavaScript

$('#JQueryClick').click(function(){alert('1')})
$('#JQueryClick').click(function(){alert('2')})

$('#JQueryAttrClick').attr('onClick'," alert('1')" ) //This doesn't work
$('#JQueryAttrClick').attr('onClick'," alert('2')" )

หากเรากำลังพูดถึงประสิทธิภาพไม่ว่าในกรณีใดการใช้โดยตรงจะเร็วกว่าเสมอ แต่การใช้คุณสมบัติคุณจะสามารถกำหนดได้เพียงหนึ่งฟังก์ชัน


เราสามารถดำเนินการมากกว่าหนึ่งฟังก์ชั่นโดยใช้คุณลักษณะเช่น $ ('# JQueryAttrClick') attr ('onClick', "alert ('2'); alert ('3'); alert ('4')")
Kira

8

การแยกข้อกังวลเป็นกุญแจสำคัญที่นี่ดังนั้นการผูกเหตุการณ์จึงเป็นวิธีที่ยอมรับกันโดยทั่วไป นี่เป็นสิ่งที่คำตอบที่มีอยู่จำนวนมากได้พูดไปแล้ว

อย่างไรก็ตามอย่าทิ้งความคิดที่จะเปิดเผยมาร์กอัปเร็วเกินไป มันมีสถานที่และกรอบเช่น Angularjs เป็นศูนย์กลาง

จำเป็นต้องมีความเข้าใจว่าสิ่งเหล่า<div id="myDiv" onClick="divFunction()">Some Content</div>นั้นได้รับความอับอายอย่างหนักเพราะนักพัฒนาบางรายถูกทารุณกรรม tablesดังนั้นจึงถึงจุดของสัดส่วนร้ายกาจเหมือน นักพัฒนาบางคนจริงหลีกเลี่ยงtablesสำหรับข้อมูลตาราง มันเป็นตัวอย่างที่สมบูรณ์แบบของคนที่แสดงโดยที่ไม่เข้าใจ

แม้ว่าฉันจะชอบความคิดที่ทำให้พฤติกรรมของฉันแยกจากมุมมองของฉัน ฉันไม่เห็นปัญหาใด ๆ กับมาร์กอัปที่ประกาศว่ามันทำอะไร (ไม่เป็นอย่างไรมันเป็นพฤติกรรม) มันอาจจะอยู่ในรูปแบบของแอตทริบิวต์ onClick จริงหรือแอตทริบิวต์ที่กำหนดเองเช่นส่วนประกอบ javascript bootstraps

ด้วยวิธีนี้คุณสามารถดูสิ่งที่ทำอยู่แทนที่จะมองมาร์กอัปตัวเชื่อมโยงเหตุการณ์จาวาสคริปต์

ดังนั้นเป็นทางเลือกที่สามจากด้านบนการใช้แอตทริบิวต์ data เพื่อประกาศพฤติกรรมภายในมาร์กอัปอย่างชัดเจน พฤติกรรมนั้นอยู่ในมุมมอง แต่คุณสามารถเห็นสิ่งที่เกิดขึ้นได้อย่างรวดเร็ว

ตัวอย่าง Bootstrap:

<button type="button" class="btn btn-lg btn-danger" data-toggle="popover" title="Popover title" data-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>

ที่มา: http://getbootstrap.com/javascript/#popovers

หมายเหตุข้อเสียเปรียบหลักกับตัวอย่างที่สองคือมลภาวะของเนมสเปซส่วนกลาง สิ่งนี้สามารถหลีกเลี่ยงได้โดยใช้ทางเลือกที่สามด้านบนหรือกรอบงานเช่น Angular และแอตทริบิวต์ ng-click ที่มีขอบเขตโดยอัตโนมัติ


4

ไม่มีใครดีไปกว่าการใช้เพื่อวัตถุประสงค์ที่แตกต่างกัน onClick(ควรเป็นจริงonclick) มีประสิทธิภาพดีกว่าเล็กน้อย แต่ฉันสงสัยอย่างมากว่าคุณจะสังเกตเห็นความแตกต่างที่นั่น

เป็นที่น่าสังเกตว่าพวกเขาทำสิ่งต่าง ๆ : .clickสามารถผูกกับคอลเลกชัน jQuery ใด ๆ ในขณะที่onclickจะต้องมีการใช้แบบอินไลน์ในองค์ประกอบที่คุณต้องการที่จะผูกพัน คุณสามารถผูกเหตุการณ์เดียวเท่านั้นที่จะใช้onclickในขณะที่.clickช่วยให้คุณสามารถผูกเหตุการณ์ต่อไป

ในความคิดของฉันฉันจะสอดคล้องกับมันและเพียงแค่ใช้.clickทุกที่และเก็บรหัส JavaScript ของฉันทั้งหมดไว้ด้วยกันและแยกออกจาก HTML

onclickอย่าใช้ ไม่มีเหตุผลที่จะใช้มันนอกจากว่าคุณรู้ว่าคุณกำลังทำอะไรอยู่


2
แม้ว่าจะไม่ได้คำจำกัดความ "ดีกว่า" อย่างชัดเจน แต่ก็แทบไม่เป็นความคิดที่ดีเลยที่จะนำตัวจัดการเหตุการณ์มาไว้ในมาร์กอัปของคุณโดยตรง
Jay

@Jayraj ฉันไม่เคยพูดในคำตอบของฉันว่าเป็นความคิดที่ดีหรือไม่?
ยาระเบิดใน

3
โดยกล่าวว่า.clickไม่ได้ดีกว่าonclick( "ไม่มีใครเป็นดีกว่า ") มันก็ส่อให้เห็นว่าonclickเกือบจะหรือเพียงแค่เป็นดีวิธีการเขียนโค้ดเมื่อในความเป็นจริง.clickคือการปฏิบัติที่ดีกว่าโดยไมล์ ขออภัย IMHO คุณควรใช้คำตอบของคุณใหม่
Jay

2
@ExplosionPills ฉันจะลบส่วนหนึ่งของคำตอบที่ระบุว่าไม่ดีกว่า วรรคท้ายฟังดูเหมือนขัดแย้ง
Juan Mendes

4
<whatever onclick="doStuff();" onmouseover="in()" onmouseout="out()" />

onclick, onmouseover, onmouseout, ฯลฯเหตุการณ์จริง ๆ แล้วไม่ดีสำหรับประสิทธิภาพ (ในInternet Explorerส่วนใหญ่ไปคิด) หากคุณใช้รหัสVisual Studioเมื่อคุณเรียกใช้เพจด้วยสิ่งเหล่านี้แต่ละอันจะสร้างบล็อก SCRIPT แยกกันเพื่อรับหน่วยความจำและทำให้ประสิทธิภาพลดลง

ไม่พูดถึงคุณควรแยกความกังวล : JavaScript และเค้าโครงควรแยก!

มันจะดีกว่าเสมอในการสร้างแม้กระทั่งแฮนเดอร์สำหรับกิจกรรมเหล่านี้กิจกรรมหนึ่งสามารถจับรายการนับแสนรายการแทนที่จะสร้างบล็อกสคริปต์แยกกันนับพันรายการสำหรับแต่ละรายการ!

(นอกจากนี้ทุกสิ่งที่คนอื่นพูด)



3

ส่วนใหญ่แล้ววิธีการดั้งเดิมของ JavaScript นั้นเป็นตัวเลือกที่ดีกว่า jQuery เมื่อประสิทธิภาพเป็นเกณฑ์เพียงอย่างเดียว แต่ jQuery ใช้ประโยชน์จาก JavaScript และทำให้การพัฒนาง่ายขึ้น คุณสามารถใช้ jQuery ได้เพราะไม่ทำให้ประสิทธิภาพการทำงานลดลงมากเกินไป ในกรณีเฉพาะของคุณความแตกต่างของประสิทธิภาพนั้นไม่อาจเพิกเฉยได้


2

วิธีแรกของการใช้onclickไม่ใช่ jQuery แต่เพียง Javascript ดังนั้นคุณจะไม่ได้รับ jQuery วิธี jQuery สามารถขยายผ่านตัวเลือกได้หากคุณต้องการเพิ่มไปยังองค์ประกอบอื่น ๆ โดยไม่ต้องเพิ่มตัวจัดการเหตุการณ์ในแต่ละองค์ประกอบ แต่อย่างที่คุณมีตอนนี้เป็นเพียงคำถามถ้าคุณต้องการใช้ jQuery หรือไม่

ส่วนตัวเนื่องจากคุณใช้ jQuery ฉันจะติดกับมันเพราะมันสอดคล้องและ decouple มาร์กอัปจากสคริปต์


1
ตัวอย่าง jQuery นั้นเหมือนกันdocument.querySelector('#something').addEventListener(...หรือคล้ายกันใน Javascript ธรรมดาดังนั้นจึงไม่ใช่ประเด็น ในทำนองเดียวกันคุณสามารถดักจับเหตุการณ์จากโหนดลูกใน Javascript ได้ไม่ใช่แค่กับทางลัด jQuery หัวใจของเรื่องคือเหตุการณ์เหล่านี้ควรจะอยู่ในการควบคุม (ไฟล์นิยามพฤติกรรมจาวาสคริปต์) มากกว่ามุมมอง (กระจัดกระจายที่นี่และมีใน html ที่ต้องการทั่วโลกตัวแปรฟังก์ชั่นหรือแย่ลงยังรหัสแบบอินไลน์.)
NoBugs

2

วิธีแรกคือการชอบ มันใช้รูปแบบการลงทะเบียนเหตุการณ์ขั้นสูง [s]ซึ่งหมายความว่าคุณสามารถแนบหลายตัวจัดการกับองค์ประกอบเดียวกัน คุณสามารถเข้าถึงวัตถุเหตุการณ์ได้อย่างง่ายดายและตัวจัดการสามารถอยู่ในขอบเขตของฟังก์ชันใดก็ได้ นอกจากนี้มันยังเป็นแบบไดนามิกเช่นสามารถเรียกใช้ได้ตลอดเวลาและเหมาะอย่างยิ่งสำหรับองค์ประกอบที่สร้างขึ้นแบบไดนามิก ไม่ว่าคุณจะใช้ jQuery ห้องสมุดอื่น ๆ หรือวิธีดั้งเดิมนั้นไม่สำคัญเลย

วิธีที่สองโดยใช้คุณสมบัติแบบอินไลน์ต้องการฟังก์ชั่นระดับโลกจำนวนมาก (ซึ่งนำไปสู่มลพิษในเนมสเปซ) และผสมเนื้อหา / โครงสร้าง (HTML) กับพฤติกรรม (JavaScript) อย่าใช้มัน

คำถามของคุณเกี่ยวกับประสิทธิภาพหรือมาตรฐานไม่สามารถตอบได้อย่างง่ายดาย ทั้งสองวิธีมีความแตกต่างอย่างสิ้นเชิงและทำสิ่งที่แตกต่าง อันแรกนั้นทรงพลังกว่าในขณะที่อันที่สองถูกดูหมิ่น


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.