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.

  • pasando objects PHP a javascript
  • patrón literal de object javascript con múltiples instancias
  • Cómo hacer reference a las properties del object actual en JS
  • ES6 Deconstrucción de una matriz de objects
  • Cómo cambiar el valor del atributo de datos del elemento HTML en javascript
  • Cómo convertir cadena a object en Angularjs
  • Usando JavaScript, ¿cuál es la forma más rápida de eliminar de forma recursiva properties y valores de un object?
  • ¿Cómo representar la creación de objects Javascript con un diagtwig de class UML?
  • Object.defineProperty get / set closure
  • Nombre de la propiedad del object como número
  • Verificar si un valor es un object en JavaScript
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.