จะส่งพารามิเตอร์ไปยังตัวจัดการเหตุการณ์ได้อย่างไร เมื่อฉันเริ่มใช้งาน Javascript เป็นครั้งแรก ฉันมักจะประสบปัญหานี้เนื่องจากฉันไม่มีความเข้าใจอย่างลึกซึ้งเกี่ยวกับการปิดตัวลง
ฉันมักจะพบปัญหาประเภทนี้ในกลุ่มสนทนาดังนี้
คัดลอกรหัสรหัสดังต่อไปนี้:
<!DOCTYPE HTML>
<html>
<หัว>
<meta charset="utf-8">
<title>จะส่งพารามิเตอร์ไปยังตัวจัดการเหตุการณ์ได้อย่างไร? </หัวข้อ>
</หัว>
<ร่างกาย>
<a href="#" id="aa">คลิกฉัน</a>
<script type="text/javascript">
วาร์ E = {
เปิด : function(el, type, fn){
el.addEventListener?
el.addEventListener (ชนิด fn เท็จ):
el.attachEvent("เปิด" + ประเภท, fn);
-
ยกเลิก : function(el,type,fn){
el.removeEventListener?
el.removeEventListener (ประเภท fn เท็จ):
el.detachEvent("เปิด" + พิมพ์, fn);
-
-
var v1 = 'แจ็ค', v2 = 'ลิลลี่';
ตัวจัดการฟังก์ชัน (arg1, arg2) {
การแจ้งเตือน (arg1);
การแจ้งเตือน (arg2);
-
// จะส่งพารามิเตอร์ v1 และ v2 ไปยังตัวจัดการได้อย่างไร?
//วัตถุเหตุการณ์เริ่มต้นจะถูกส่งผ่านเป็นพารามิเตอร์แรกของตัวจัดการ
//ในขณะนี้ สิ่งแรกที่ปรากฏขึ้นเมื่อคลิกลิงก์คือออบเจ็กต์เหตุการณ์ และสิ่งที่สองไม่ได้ถูกกำหนดไว้
E.on(document.getElementById('aa'),'คลิก',ตัวจัดการ);
</สคริปต์>
</ร่างกาย>
</html>
จะส่งพารามิเตอร์ v1 และ v2 ไปยังตัวจัดการได้อย่างไร ออบเจ็กต์เหตุการณ์เริ่มต้นจะถูกส่งผ่านเป็นพารามิเตอร์แรกของตัวจัดการ เมื่อคลิกลิงก์ สิ่งแรกที่ปรากฏขึ้นคือออบเจ็กต์เหตุการณ์ และสิ่งที่สองไม่ได้ถูกกำหนดไว้
ตัวเลือกที่ 1 ออบเจ็กต์เหตุการณ์จะไม่ถูกเก็บรักษาและส่งผ่านเป็นพารามิเตอร์แรก
คัดลอกรหัสรหัสดังต่อไปนี้:
ตัวจัดการฟังก์ชัน (arg1, arg2) {
การแจ้งเตือน (arg1);
การแจ้งเตือน (arg2);
-
E.on(document.getElementById('aa'),'คลิก',function(){
ตัวจัดการ (arg1,arg2);
-
ตัวเลือกที่ 2 เก็บวัตถุเหตุการณ์เป็นพารามิเตอร์แรก
คัดลอกรหัสรหัสดังต่อไปนี้:
ตัวจัดการฟังก์ชัน (e, arg1, arg2) {
การแจ้งเตือน (e);
การแจ้งเตือน (arg1);
การแจ้งเตือน (arg2);
-
E.on(document.getElementById('aa'),'คลิก',ฟังก์ชัน(e){
ตัวจัดการ (e, arg1, arg2);
-
ตัวเลือกที่ 3: เพิ่ม getCallback ไปที่ Function.prototype โดยไม่ต้องเก็บวัตถุเหตุการณ์ไว้
คัดลอกรหัสรหัสดังต่อไปนี้:
Function.prototype.getCallback = ฟังก์ชั่น(){
var _this = สิ่งนี้ args = อาร์กิวเมนต์;
ฟังก์ชั่นส่งคืน (e) {
กลับ _this.apply (นี้ || หน้าต่าง args);
-
-
E.on(document.getElementById('aa'),'คลิก',handler.getCallback(v1,v2));
ตัวเลือกที่ 4: เพิ่ม getCallback ไปที่ Function.prototype และคงวัตถุเหตุการณ์ไว้เป็นพารามิเตอร์แรก
คัดลอกรหัสรหัสดังต่อไปนี้:
Function.prototype.getCallback = ฟังก์ชั่น(){
var _this = นี่, args = [];
สำหรับ(var i=0,l=arguments.length;i<l;i++){
args[i+1] = ข้อโต้แย้ง[i];
-
ฟังก์ชั่นส่งคืน (e) {
อาร์กิวเมนต์[0] = อี;
กลับ _this.apply (นี้ || หน้าต่าง args);
-
-
E.on(document.getElementById('aa'),'คลิก',handler.getCallback(v1,v2));