Heim >Web-Frontend >js-Tutorial >Bezüglich des erfolglosen Problems der Übergabe von Parametern bei der JavaScript-Registrierung klicken Sie auf event_javascript skills
Als Java-Programmierer habe ich in den letzten sechs Monaten aufgrund der Anforderungen an die Bankautomatisierung mehr JavaScript-Code als Java-Code geschrieben Unter Berücksichtigung verschiedener Faktoren wie Organisationsberechtigungen, Kassierertypberechtigungen, Positionsberechtigungen, Geschäftsberechtigungen usw. müssen diese Berechtigungen mehrfach überschnitten oder kombiniert werden, und auf der Seite muss zur Steuerung viel JavaScript verwendet werden. Dies hat dazu geführt, dass der JavaScript-Code stärker für die Implementierung dieses Funktionsmoduls verantwortlich ist als der Java-Code.
Jetzt müssen wir ein Schließfachverwaltungssystem für eine Bank entwickeln. Seine Kernfunktionsblöcke sind die Schließfachverwaltung und die Schließfachverwaltung, um Verwaltungsfunktionen zu erreichen, die so intuitiv und komfortabel sind wie das C/S In der Architektur werden die Ergebnisse auch in Echtzeit für den Bediener angezeigt. Nach mehreren Tagen des Nachdenkens und Experimentierens haben wir schließlich JavaScript für die Entwicklung, Java für die Verwaltung der Geschäftslogik und CSS für die Darstellung verschiedener Zustände des Zielobjekts verwendet. und JavaScript, um basierend auf dem Status des Zielobjekts dessen CSS-Umschaltung zu erreichen.
Ich bin hier auf ein Problem gestoßen, nämlich beim Registrieren einer Click-Event-Handler-Funktion für ein HTML-Element in JavaScript, beispielsweise bei der Übergabe von 3 Parametern an die Handler-Funktion. Unabhängig davon, ob Sie die folgende Methode verwenden (Knoten stellt den Knoten dar, der das Ereignis registriert, Spaß macht die Ereignisverarbeitungsfunktion), können Sie der Ereignisverarbeitungsfunktion keine Parameter übergeben:
node.addEventListener('click', fun, false); node.attachevent('onclick', fun); Node['onclick']=fun
Offensichtlich funktioniert keine der Methoden. Bitte beachten Sie, dass die Schreibweise falsch ist:
node.addEventListener('click', fun(arg1,arg2,arg3), false); node.attachevent('onclick', fun(arg1,arg2,arg3)); Node['onclick']=fun(arg1,arg2,arg3)
Glücklicherweise habe ich ein Buch „JavaScript.DOM Advanced Programming“ gelesen und in diesem Buch eine Lösung gefunden. Schreiben Sie zunächst eine Methode:
function bindFunction(obj, func){ var args = []; for(var i =2; i < arguments.length; i++) { args.push(arguments[i]); } return function(){ func.apply(obj, args); }; };
Fügen Sie dann die folgenden beiden Methoden zu Ihrer eigenen js-Bibliothek hinzu. Wenn Sie nichts verstehen, können Sie sich auf „JavaScript.DOM Advanced Programming“ beziehen. Eine Erklärung dieser Methode finden Sie jedoch Ich habe ein paar Änderungen hinzugefügt:
function bindFunction(obj, func){ var args = []; for(var i =2; i < arguments.length; i++) { args.push(arguments[i]); } return function(){ func.apply(obj, args); }; }; window['OYF_MARK']['bindFunction'] = bindFunction; function addEvent(node, type, listener){ //使用前面的方法检查兼容性以保证平稳退化 if (!isCompatible()) { return false } if (!(node = $(node))) return false; if (node.addEventListener) { //W3C的方法(冒泡事件,如果将false改为true,则为捕获事件) node.addEventListener(type, listener, false); return true; } else if (node.attachEvent) { //MSIE的方法 node['e' + type + listener] = listener; node[type + listener] = function(){ node['e' + type + listener](window.event); } node.attachEvent('on' + type, node[type + listener]); return true; } //若两种方法都不具备则返回false return false; }; window['OYF_MARK']['addEvent'] = addEvent;
Die beiden oben genannten Funktionen wurden von mir basierend auf dem Quellcode in „JavaScript.DOM Advanced Programming“ leicht modifiziert und zur Wiederverwendung einer meiner eigenen js-Bibliotheken hinzugefügt. Als nächstes können Sie die folgende Methode verwenden, um Ereignisse für Elemente zu registrieren und Parameter an die Ereignisverarbeitungsfunktion zu übergeben:
//注册新的onclick事件处理函数 OYF_MARK.addEvent(e,'click',OYF_MARK.bindFunction(e,getContainerDetail,x,y,containid));