En tant que programmeur Java au cours des six derniers mois, j'ai écrit plus de code JavaScript que de code Java. Il y a quelque temps, je construisais un système de contrôle de guichet pour une banque, en raison des besoins d'autorisation de guichet. Compte tenu de divers facteurs, tels que les autorisations organisationnelles, les autorisations de type caissier, les autorisations de poste, les autorisations commerciales, etc., ces autorisations doivent être croisées ou combinées plusieurs fois, et beaucoup de JavaScript doit être utilisé sur la page pour le contrôle. Cela a abouti à une situation dans laquelle le code javaScript est plus responsable de l'implémentation de ce module fonctionnel que le code java.
Nous devons maintenant développer un système de gestion de coffre-fort pour une banque. Ses blocs fonctionnels de base sont la gestion des coffres-forts et la gestion des coffres-forts afin d'obtenir des fonctions de gestion aussi intuitives et pratiques que le C/S. Architecture, il traitera également les résultats.Affichage en temps réel à l'opérateur.Après plusieurs jours de réflexion et d'expérimentation, nous avons finalement utilisé CSS javaScript java pour le développement, java pour gérer la logique métier, CSS pour exprimer les différents états de l'objet cible, et javaScript pour se baser sur l'état de l'objet cible Transform pour réaliser sa commutation CSS.
J'ai rencontré un problème ici, c'est-à-dire lors de l'enregistrement d'une fonction de gestionnaire d'événements de clic pour un élément html en JavaScript, par exemple en passant 3 paramètres à la fonction de gestionnaire. Cependant, que vous utilisiez ou non la méthode suivante (le nœud représente le nœud pour enregistrer l'événement, fun est la fonction de traitement d'événement), vous ne pouvez pas transmettre de paramètres à la fonction de traitement d'événement :
node.addEventListener('click', fun, false); node.attachevent('onclick', fun); Node['onclick']=fun
Évidemment aucune des méthodes ne fonctionne. Veuillez noter que l'écriture est incorrecte :
node.addEventListener('click', fun(arg1,arg2,arg3), false); node.attachevent('onclick', fun(arg1,arg2,arg3)); Node['onclick']=fun(arg1,arg2,arg3)
Heureusement, j'ai lu un livre "JavaScript.DOM Advanced Programming" et j'ai trouvé une solution dans ce livre. Écrivez d’abord une méthode :
function bindFunction(obj, func){ var args = []; for(var i =2; i < arguments.length; i++) { args.push(arguments[i]); } return function(){ func.apply(obj, args); }; };
Ajoutez ensuite les deux méthodes suivantes dans votre propre bibliothèque js. Si vous ne comprenez rien, vous pouvez vous référer à "JavaScript.DOM Advanced Programming". J'ai ajouté quelques modifications :
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;
Les deux fonctions ci-dessus ont été légèrement modifiées par moi sur la base du code source dans "JavaScript.DOM Advanced Programming" et ajoutées à l'une de mes propres bibliothèques js pour être réutilisées. Ensuite, vous pouvez utiliser la méthode suivante pour enregistrer des événements pour des éléments et transmettre des paramètres à la fonction de traitement des événements :
//注册新的onclick事件处理函数 OYF_MARK.addEvent(e,'click',OYF_MARK.bindFunction(e,getContainerDetail,x,y,containid));