6

Quiero hacer un elemento img no seleccionable e irrepetible porque lo estoy usando como un control de cambio de tamaño de ventana (haciendo clic y arrastrando en el div circundante redimensiona una ventana)..ondragstart no es equivalente a .addEventListener ("dragstart"

funciona perfectamente bien como las siguientes: (. 3,6 *)

noSelect[x].ondragstart = function() {return false}; 

Pero como esto se utilizará en una extensión para Firefox que utiliza un XPCNativeWrapper en cada HTMLElement, no puedo utilizar ".onsdragstart" y tienen que utilice ".addEventListener"

problema es que el equivalente al código anterior no está funcionando. Hacer clic y arrastrar la imagen img disparadores de arrastre por defecto de Firefox, en lugar de cambiar el tamaño de la ventana en el siguiente:

noSelect[x].addEventListener("dragstart", function() {return false}, false) 

son las dos líneas de código citado más arriba no son equivalentes?

contexto completo de objetos no seleccionables:

var noSelect = document.getElementsByClassName("noSelect") 
    for (x in noSelect) { 
     if (x == "length") 
      break 
     noSelect[x].unselectable = "on"; 
     noSelect[x].onselectstart = function(){return false}; 
     noSelect[x].ondragstart = function() {return false}; 
     noSelect[x].style.userSelect = "none"; // w3c standard 
     noSelect[x].style.MozUserSelect = "none"; // Firefox 
    } 

Respuesta

1
  1. ondragstart es un IE-único evento, es por eso que no se está disparando en Firefox. ACTUALIZACIÓN: es más complicado que esto, leer más aquí: Javascript ondrag, ondragstart, ondragend
  2. si ondragstart estaban disponibles en FF, se puede coger con x.ondragstart = ..., funciona en FF también.
  3. addEventListener es simplemente una forma más agradable de asignar controladores de eventos, le permite adjuntar más de un controlador para un evento a un elemento. IE tiene un sorf-de-equivalente llamado attachEvent.

Acerca de su problema: en navegadores no IE, para hacer que un objeto no se pueda seleccionar, debe detectar el evento onmousedown y evitar el comportamiento predeterminado.

+0

1. El evento SÍ se dispara en ambos casos. Puse una alerta en la función y se dispara. 2. De acuerdo con http://help.dottoro.com/ljpncnwi.php ondragstart está disponible en FF. Pero no puedo usar x.ondragstart = debido a XDCNativeWrapper. 3. Si addEventListener es simplemente más agradable, ¿por qué la sustitución de ".ondragstart" por ".addEventListener" muestra comportamientos diferentes? Todavía dispara, pero no anula el arrastre predeterminado de FF como lo hace .ondragstart. – TinyTimZamboni

+0

el comportamiento predeterminado se puede detener con la captura de mousedown – kapa

1

No sé por qué function() { return false; } no funciona, pero sé que function(event) { event.preventDefault(); } funcionará en Firefox.

5

addEventListener registra un EventListener, que no tiene ningún tratamiento de código de retorno especial.

Volviendo falsa de la mayoría de los controladores de eventos on*cancels the event per the HTML spec, en EventListener regulares esto se logra llamando event.preventDefault() como Neil mencionó en su respuesta.

+0

Esta es la respuesta que me gustaría aceptar, pero este proyecto fue de hace un tiempo y me gustaría volver y verificarlo primero. – TinyTimZamboni

Cuestiones relacionadas