Wenn Sie beispielsweise eine Click-Event-Handler-Funktion für ein HTML-Element in JavaScript registrieren, übergeben Sie 3 Parameter an die Handler-Funktion. Unabhängig davon, welche Methode verwendet wird, können Parameter jedoch nicht an die Ereignisverarbeitungsfunktion übergeben werden.
Als Java-Programmierer habe ich in den letzten sechs Monaten mehr JavaScript-Code als Java-Code geschrieben war für eine Bank. Um ein Kassiererverwaltungs- und -kontrollsystem aufzubauen, müssen im Hinblick auf die Kassiererautorisierung verschiedene Faktoren für die Kassiererautorisierung berücksichtigt werden, wie z. B. Organisationsautorität, Kassierertypautorität, Positionsautorität, Geschäftsautorität usw. und diese Autorität Die Schnitt- oder Vereinigungsverarbeitung muss mehrmals auf der Seite zur Steuerung 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ßfachbasisverwaltung und die Schließfachverwaltung Die C/S-Architektur und die Verarbeitungsergebnisse werden dem Bediener in Echtzeit angezeigt. Nach mehreren Tagen des Nachdenkens und Experimentierens wurde schließlich CSS+JavaScript+Java für die Entwicklung verwendet, Java wurde zur Verarbeitung der Geschäftslogik verwendet und CSS wurde verwendet Um verschiedene Zustände des Zielobjekts auszudrücken, wird JavaScript verwendet, um entsprechend dem Zustandsübergang des Zielobjekts dessen CSS-Umschaltung zu implementieren.
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, welche Methode verwendet wird (Knoten stellt den Knoten dar, der das Ereignis registriert, Spaß macht die Ereignisverarbeitungsfunktion), können keine Parameter an die Ereignisverarbeitungsfunktion übergeben werden:
node.addEventListener('click', fun, false); node.attachevent('onclick', fun); Node['onclick']=fun
Offensichtlich funktioniert keine der Methoden:
node.addEventListener('click', fun(arg1,arg2,arg3), false); node.attachevent('onclick', fun(arg1,arg2,arg3)); Node['onclick']=fun(arg1,arg2,arg3)
Zum Glück habe ich Ich habe ein Buch „JavaScript.DOM Advanced“ Programming gelesen und in diesem Buch die 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 js-Bibliothek hinzu. Wenn Sie nichts verstehen, können Sie auf JavaScript zurückgreifen .DOM Advanced Programming“, Abschnitt 2.3 des Buches, enthält eine Erklärung dieser Methode, ich habe jedoch einige Ä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 Ich habe den Quellcode in „JavaScript.DOM Advanced Programming“ leicht modifiziert und ihn zur Wiederverwendung einer eigenen js-Bibliothek 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));
Weitere verwandte Artikel über das erfolglose Problem der Parameterübergabe bei der JavaScript-Registrierung click event Bitte achten Sie auf die chinesische PHP-Website!