ในฐานะโปรแกรมเมอร์ Java ในช่วงหกเดือนที่ผ่านมารหัส JavaScript ที่ฉันเขียนนั้นเกือบจะมากกว่ารหัส Java เมื่อไม่นานมานี้ฉันได้สร้างการจัดการและระบบควบคุมพนักงานสำหรับธนาคาร ในการทำงานของการอนุญาตให้มีการอนุญาตให้มีการพิจารณาปัจจัยต่าง ๆ เช่นอำนาจขององค์กรอำนาจประเภทพนักงานผู้มีอำนาจงานอำนาจทางธุรกิจ ฯลฯ และอำนาจเหล่านี้จะต้องถูกตัดหรือสหภาพและต้องใช้จาวาสคริปต์จำนวนมากในหน้าเพื่อควบคุมมัน สิ่งนี้ทำให้รหัส JavaScript รับผิดชอบต่อการใช้งานโมดูลการทำงานนี้มากกว่ารหัส Java
ตอนนี้ระบบการจัดการกล่องปลอดภัยได้รับการพัฒนาสำหรับธนาคาร บล็อกการทำงานหลักของมันการจัดการที่นั่งกล่องปลอดภัยและการจัดการกล่องปลอดภัยเพื่อให้ตระหนักถึงฟังก์ชั่นการจัดการที่ใช้งานง่ายและสะดวกสบายเหมือนสถาปัตยกรรม C/S และแสดงผลการประมวลผลไปยังผู้ปฏิบัติงานในเวลาจริงหลังจากคิดและการทดลองหลายวัน การเปลี่ยน CSS ตามการเปลี่ยนสถานะของวัตถุเป้าหมาย
ปัญหาที่พบในเรื่องนี้คือเมื่อลงทะเบียนตัวจัดการเหตุการณ์คลิกสำหรับองค์ประกอบ HTML ใน JavaScript ตัวอย่างเช่นผ่านพารามิเตอร์ 3 ตัวไปยังตัวจัดการ อย่างไรก็ตามไม่ว่าจะใช้วิธีการต่อไปนี้ (โหนดหมายถึงโหนดในการลงทะเบียนเหตุการณ์และความสนุกคือฟังก์ชั่นการจัดการเหตุการณ์) มันไม่สามารถส่งพารามิเตอร์ไปยังฟังก์ชั่นการจัดการเหตุการณ์:
node.addeventListener ('คลิก', สนุก, เท็จ); node.attachevent ('onclick', fun); node ['onclick'] = funเห็นได้ชัดว่าวิธีการไม่ดีดังนั้นโปรดทราบว่าวิธีการเขียนไม่ถูกต้อง:
node.addeventListener ('คลิก', fun (arg1, arg2, arg3), false); node.attachevent ('onclick', fun (arg1, arg2, arg3)); โหนด ['onclick'] = fun (arg1, arg2, arg3)โชคดีที่ฉันอ่านหนังสือที่ชื่อว่า "JavaScript.dom Advanced Programming" และพบวิธีแก้ปัญหาในหนังสือเล่มนี้ ก่อนเขียนวิธี:
ฟังก์ชั่น bindfunction (obj, func) {var args = []; สำหรับ (var i = 2; i <arguments.length; i ++) {args.push (อาร์กิวเมนต์ [i]);} return function () {func.apply (obj, args);}; -จากนั้นเพิ่มสองวิธีต่อไปนี้ในไลบรารี JS ของคุณ หากคุณไม่เข้าใจคุณสามารถอ้างถึง "JavaScript.DOM การออกแบบการเขียนโปรแกรมขั้นสูง" ส่วน 2.3 ของหนังสือเล่มนี้มีคำอธิบายของวิธีนี้ แต่ฉันได้เพิ่มการเปลี่ยนแปลงบางอย่าง:
ฟังก์ชั่น bindfunction (obj, func) {var args = []; สำหรับ (var i = 2; i <arguments.length; i ++) {args.push (อาร์กิวเมนต์ [i]);} return function () {func.apply (obj, args);};}; หน้าต่าง ['oyf_mark'] ['bindfunction'] = bindfunction; ฟังก์ชั่น addevent (โหนด, ประเภท, ฟัง) {// ใช้วิธีก่อนหน้าเพื่อตรวจสอบความเข้ากันได้เพื่อให้แน่ใจว่าการย่อยสลายอย่างราบรื่นถ้า (! iscompatible ()) {return false} ถ้า (! (node = $ (node))) ส่งคืน false; if (node.addeventListener) {// // w3c เมธอด (เหตุการณ์ฟองถ้าเท็จเปลี่ยนเป็นจริงมันเป็นเหตุการณ์การจับภาพ) node.addeventListener (ประเภท, ฟัง, เท็จ); return true;} elseif (node.attachevent) {// method method node ['e' + type + listener] = Listener; node [type + listener] = function () {node ['e' + type + Listener] (window.event);} node.attachevent (' กลับมาจริง; } // หากไม่มีวิธีใดให้ส่งคืน False return false;}; window ['oyf_mark'] ['addEvent'] = addEvent;ฟังก์ชั่นสองฟังก์ชั่นข้างต้นได้รับการแก้ไขเล็กน้อยจากซอร์สโค้ดใน "JavaScript.dom Advanced Programming" และเพิ่มเข้าไปในห้องสมุด JS ของฉันเพื่อนำมาใช้ซ้ำ ถัดไปคุณสามารถลงทะเบียนกิจกรรมไปยังองค์ประกอบและพารามิเตอร์ผ่านไปยังฟังก์ชันตัวจัดการเหตุการณ์ด้วยวิธีต่อไปนี้:
// ลงทะเบียนฟังก์ชั่นตัวจัดการเหตุการณ์ onClick ใหม่ oyf_mark.addevent (e, 'คลิก', oyf_mark.bindfunction (e, getContainerDetail, x, y, containid));