XBL Eventos y Handlers

Hola gente,
Una pregunta más. Sabéis que me estoy peleandome con XUL, XBL y asociados.

Tengo un evento nuevo onmieventochulo y quiero lanzarlo en varios momentos en mi control recien creado en xbl. Esto funcionar funciona pero no me queda claro que sea la manera más correcta.

xul:

xbl:
Definimos el handler

      <handler event="mieventoxulo">
        <![CDATA[

	  if(this.getAttribute('onmieventoxulo')){
		  eval(this.getAttribute('onmieventoxulo'));
	  }
	    
        ]]>
      </handler>

y para lanzar el evento desde el código:

[code]      var e = document.createEvent("Events");
          e.initEvent("mieventoxulo", false, true);
          this.dispatchEvent(e);

[/code]

Mi duda gorda está en la definición del handler… me parece un tanto chapucero y me da a mi que hay algo que no se para enlazar directamente el hamdler a la propiedad de la etiqueta.

Hola

La forma mas correcta seria:

     if(this.hasAttribute('onmieventoxulo')){  //tambien he cambiado getAttribute por hasAttribute, que aunque ambos funcionan, el segundo es mas adecuado
         var f = new Function("event",this.getAttribute('onmieventoxulo'));
         f.call(this,event);
     }

De este modo, el contexto actual (variable this) es el elemento, y se pasa el parametro event a el codigo.

O incluso mejor aun, si puedes evitar poner javascript dentro de el XUL y suscribirte a los eventos desde javascript usando addEventListener.

Namaste :slight_smile:

Gracias YouWoTMA,

Gran apreciación poder utilizar event dentro de mi código.

Y cambiada la forma de asignar el evento:
document.getElementById(‘mielemento’).addEventListener(“mieventoxulo”, function(){alert(‘prueba’)}, true);

      Eres un grande, gracias.