Maison  >  Article  >  interface Web  >  Concernant le problème d'échec de la transmission des paramètres dans l'événement de clic d'enregistrement JavaScript

Concernant le problème d'échec de la transmission des paramètres dans l'événement de clic d'enregistrement JavaScript

高洛峰
高洛峰original
2017-02-16 17:19:52943parcourir

Lors de l'enregistrement d'une fonction de gestionnaire d'événements de clic pour un élément html dans javaScript, par exemple, transmettez 3 paramètres à la fonction de gestionnaire. Cependant, quelle que soit la méthode suivante utilisée, les paramètres ne peuvent pas être transmis à la fonction de traitement d'événements

En tant que programmeur Java au cours des six derniers mois, j'ai écrit plus de code javaScript que de code java. était pour une banque Pour construire un système de gestion et de contrôle des caissiers, en termes d'autorisation de caissier, divers facteurs doivent être pris en compte pour l'autorisation de caissier, tels que l'autorité organisationnelle, l'autorité de type de caissier, l'autorité de poste, l'autorité commerciale, etc., et ces autorités doit être effectué plusieurs fois. Le traitement de l'intersection ou de l'union nécessite l'utilisation de beaucoup de javascript 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 de la base des coffres-forts et la gestion des coffres-forts afin d'obtenir des fonctions de gestion aussi intuitives et pratiques que possible. l'architecture C/S, et les résultats du traitement sont affichés à l'opérateur en temps réel. Après plusieurs jours de réflexion et d'expérimentation, CSS javaScript java a finalement été utilisé pour le développement, java a été utilisé pour traiter la logique métier, CSS a été utilisé pour exprimer diverses. états de l'objet cible, et javaScript a été utilisé pour développer en fonction de la cible. La transition d'état de l'objet est utilisée 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, quelle que soit la méthode suivante utilisée (node ​​​​représente le nœud pour enregistrer l'événement, fun est la fonction de traitement d'événement), les paramètres ne peuvent pas être transmis à 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. Attention, 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, je. J'ai lu un livre "JavaScript.DOM Advanced" Programming", j'ai trouvé la 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 à votre bibliothèque js. Si vous ne comprenez rien, vous pouvez vous référer à JavaScript. .DOM Advanced Programming", la section 2.3 du livre contient une explication de cette méthode, mais 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[&#39;OYF_MARK&#39;][&#39;bindFunction&#39;] = 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[&#39;e&#39; + type + listener] = listener;
node[type + listener] = function(){
node[&#39;e&#39; + type + listener](window.event);
} 
node.attachEvent(&#39;on&#39; + type, node[type + listener]); 
return true; 
}
//若两种方法都不具备则返回false 
return false;
};
window[&#39;OYF_MARK&#39;][&#39;addEvent&#39;] = addEvent;

Les deux fonctions ci-dessus J'ai légèrement modifié le code source dans "JavaScript.DOM Advanced Programming" et je l'ai ajouté à ma propre bibliothèque js pour le réutiliser. 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 d'événements :

//注册新的onclick事件处理函数
OYF_MARK.addEvent(e,&#39;click&#39;,OYF_MARK.bindFunction(e,getContainerDetail,x,y,containid));

Plus d'articles connexes sur le problème infructueux de la transmission des paramètres lors de l'enregistrement javaScript. événement de clic Veuillez faire attention au site Web chinois PHP !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn