كمبرمج Java في الأشهر الستة الماضية ، فإن رمز JavaScript الذي كتبته هو أكثر من رمز Java تقريبًا. منذ بعض الوقت ، قمت ببناء نظام إدارة ومراقبة الصراف للبنك. في وظيفة ترخيص الصراف ، يجب مراعاة العوامل المختلفة ، مثل السلطة التنظيمية ، وسلطة نوع الصراف ، وسلطة الوظائف ، وسلطة الأعمال ، وما إلى ذلك ، ويجب تقاطع هذه السلطة أو نقابة ، ويجب استخدام العديد من JavaScript على الصفحة للسيطرة عليها. وقد تسبب هذا في أن يكون رمز JavaScript أكثر مسؤولية عن تنفيذ هذه الوحدة الوظيفية من رمز Java.
الآن ، تم تطوير نظام إدارة مربع آمن للبنك. إن الكتل الوظيفية الأساسية ، وإدارة مقعد المربع الآمن وإدارة الصناديق الآمنة ، من أجل إدراك وظائف الإدارة بديهية ومريحة مثل بنية C/S ، وعرض نتائج المعالجة للمشغل في الوقت الحقيقي ، بعد عدة أيام من التفكير والتجريب ، يتم استخدام CSS+JavaScript+Java معتاد على وجود مفتاح تجريبي. من CSS وفقا لنقل حالة الكائن المستهدف.
مشكلة مواجهة في هذا هي أنه عند تسجيل معالج أحداث النقر لعنصر HTML في JavaScript ، على سبيل المثال ، تمرير 3 معلمات إلى المعالج. ومع ذلك ، بغض النظر عن استخدام الطريقة التالية (تعني العقدة أن العقدة لتسجيل الحدث ، والمرح هي وظيفة معالجة الأحداث) ، لا يمكن نقل المعلمات إلى وظيفة معالجة الأحداث:
node.addeventListener ('click' ، المرح ، خطأ) ؛ node.attachevent ('onClick' ، fun) ؛ node ['onClick'] = متعةمن الواضح أن الطريقة ليست جيدة ، لذا يرجى ملاحظة أن طريقة الكتابة غير صحيحة:
node.addeventListener ('click' ، fun (arg1 ، arg2 ، arg3) ، false) ؛ node.attachevent ('onClick' ، Fun (Arg1 ، Arg2 ، Arg3)) ؛ العقدة ['onclick'] = متعة (arg1 ، arg2 ، arg3)لحسن الحظ ، قرأت كتابًا بعنوان "JavaScript.Dom Advanced Programming" ووجدت حلاً في هذا الكتاب. أولا اكتب طريقة:
دالة bindFunction (obj ، func) {var args = [] ؛ لـ (var i = 2 ؛ i <enduces.length ؛ i ++) {args.push (الوسيطات [i]) ؛} function () {funC.Apply (obj ، args) ؛} ؛ } ؛ثم أضف الطريقتين التاليتين إلى مكتبة JS الخاصة بك. إذا كنت لا تفهم ، فيمكنك الرجوع إلى "JavaScript.dom Advanced Programming Design". يحتوي قسم 2.3 من الكتاب على شرح لهذه الطريقة ، لكنني أضفت بعض التغييرات:
دالة bindFunction (obj ، func) {var args = [] ؛ لـ (var i = 2 ؛ i <enduments.length ؛ i ++) {args.push (الوسيطات [i]) ؛} function () {funC.Apply (obj ، args) ؛} ؛} ؛ نافذة ['oyf_mark'] ['bindFunction'] = bindFunction ؛ الوظيفة AddEvent (العقدة ، النوع ، المستمع) {// استخدم الطريقة السابقة للتحقق من التوافق لضمان تدهور سلس إذا (! iSCompatible ()) {return false} if (! (node = $ (node))) if (node.addeventListener) {// w3c method (حدث فقاعة ، إذا تم تغيير خطأ إلى صحيح ، فهو حدث التقاط) node.addeventListener (النوع ، المستمع ، false) ؛ return true ؛} elseif (node.attachevent) {// msie method node ['e' + type + beasherer] = node [type + beasherer] = function () {node ['e' + type + beasher] (window.event) ؛} node.attachevent ('on' + type ، node [type + beader]) ؛ العودة صحيح. } // إذا لم تتوفر أي من الأسلوب ، فإن إرجاع عودة خاطئة خطأ ؛} ؛ نافذة ['oyf_mark'] ['addevent'] = addEvent ؛تم تعديل وظيفتين أعلاه بشكل طفيف من الكود المصدري في "JavaScript.dom Advanced Programming" وإضافته إلى واحدة من مكتبة JS الخاصة بي لإعادة الاستخدام. بعد ذلك ، يمكنك تسجيل الأحداث في العنصر وتمرير المعلمات إلى وظيفة معالج الأحداث بالطريقة التالية:
.