2016-11-21 4 views
0

Ceci est le contenu de mon fichier js:feu Prototype événement change problème

window.onload = function() { 
    obj = document.getElementById("_accountwebsite_id"); 
    Event.observe(obj, 'change', function() { 
     alert('hi'); 
    }); 
} 

Je veux tirer sur l'événement changement pour mon menu déroulant: _accountwebsite_id. La bibliothèque prototype est chargée avant ce fichier. Je n'ai pas d'erreurs dans la console. Où ai-je tort? thx

Répondre

1

Vous faites beaucoup de travail supplémentaire ici que Prototype fait pour vous. Tout d'abord, la définition de la méthode onload du document est non seulement vraiment old-school, mais elle va également bouleverser tout observateur précédemment défini sur cet événement.

$(document).observe('dom:loaded', function(...){...}); 

... est la manière moderne d'enregistrer un (ou plusieurs) écouteurs d'événement dans l'événement de chargement de document.

Ensuite, vous utilisez getElementById ici, qui fonctionnera, mais ne retourne pas un objet Prototype-étendu dans certains navigateurs.

$('element-id'); 

... va à la fois obtenir la référence de l'élément et l'étendre si votre navigateur n'a pas respecté tous les aspects de l'héritage prototypique. Enfin, tout ceci peut être rendu plus simple et plus résistant à l'épreuve des balles en utilisant un observateur différé. Imaginez si votre DOM d'interface a été mis à jour par Ajax - cela ferait manquer à votre observateur les événements déclenchés par cet élément select, car il ne faisait pas référence au même élément (===), même si l'ID correspondait.

$(document).on('change', '#_accountwebsite_id', function(evt, elm){ 
    alert(elm.inspect()); 
}); 

Cet observateur répondra à tout événement de changement sur un élément avec l'ID correct, même si elle a été ajoutée après que l'observateur a été inscrit sur le document.

+0

Je ne sais pas comment vous remercier !!!!! –

+0

Je viens de repérer quelques fautes de frappe, alors rechargez avant de l'utiliser directement! – Walter