Objeto de evento en Firefox

Lo siento, este parece ser un gran deleite del público … Esa debería ser la razón por la cual Firefox no ha cambiado su código para ser totalmente compatible con el object Evento al igual que Chrome. Hice mi tarea, intenté varias soluciones que se dieron aquí en StackOverflow, pero nada parece funcionar. Tengo este código:

function xpto(e) { if( !e ) e = window.event; var x = e.target||e.srcElement; alert(x); ........ } 

La llamada se hace como:

 <svg id="graph-svg" onclick="xpto(event)" style="outline: none;" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 

Sí … Es un elemento svg que estoy tratando de get onclick. No puse el código completo porque no era relevante para la pregunta. En pocas palabras, el

 alert(x) 

siempre está alertando con indefinido en Firefox, y trabajando en Chrome como un encanto. Puedo tomar el evento en Firefox, pero la "x" siempre aparece indefinida.

En Firefox en la descripción del DOM, se admiten events y SVG. Evento incluso se define con las properties "objective" y "srcElement" para compatibilidad con versiones anteriores.

Estoy usando Firefox 20 en Ubuntu … ¿Alguien puede ayudarme?

2 Solutions collect form web for “Objeto de evento en Firefox”

Después de una respuesta de d'alar'cop fui al código y descubrí que el argumento que funciona en firefox no es "evento" o "evento" sino "evt" … La console en Firebug mostró esto:

  function onclick(evt) { xpto(event) } 

Entonces con eso me di count de que el manejador estaba siendo llamado con "evento" en lugar del argumento original "evt". Luego, cuando se networkingujo al manejador, el "evento" iba a ser "nulo" … indefinido.

Muchas veces veo el controller de events insertado en código HTML, en lugar de confiar en los oyentes de events más potentes.

En lugar de usar onclick ¿por qué no adjuntas un oyente al elemento SVG ? Puedes intentar esto:

 var addListener = function (element, event, callback) { // We define a cross-browser function if (window.addEventListener) { // Mozilla/Webkit/Opera element.addEventListener(event, callback, false); } else { // IE element.attachEvent('on' + event, callback); } }; // Then we attach the event listener to the SVG element addListener(document.getElementById('graph-svg'), 'click', function (evt) { // Here you can manage the finetworking event alert(evt); }); 

o, usando jQuery:

 $('#graph-svg').on('click', function(evt){ alert(evt); }); 

Puedes probarlo con este violín (probado con FF 20.0 y Chrome 26 en Ubuntu 12.10).

Por supuesto, los manipuladores en línea no siempre son malvados, pero muchas veces no son la solución, en mi humilde opinión.

  • Accediendo a Objetos en JSON Array (JavaScript)
  • Cómo agregar valores a una propiedad de object desde otro object con la misma definición En JavaScript
  • Looping a través de localStorage en HTML5 y JavaScript
  • Encontrar object por id en una matriz de objects de JavaScript
  • Diferencia entre el estilo de definir setter y getter en Javascript
  • Accediendo a un elemento de matriz dentro del object JSON
  • Javascript empujando object en matriz
  • Safari no ordera una matriz de objects como otros browseres
  • Función de llamada desde cadena dentro del object?
  • Javascript: sobrescribe SOLAMENTE los campos existentes en un object con los campos en otro
  • PHP escribe objects en línea
  • cómo get el nombre del object en javascript?
  • .slice o Array.prototype.slice
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.