6

Voglio rendere un elemento img non selezionabile e non trascinabile perché lo sto usando come controllo ridimensionamento della finestra (facendo clic e trascinando il div circostante si ridimensiona una finestra).ondragstart non equivalente a .addEventListener ("dragstart"

funziona perfettamente bene come la seguente: (. 3,6 *)

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

Ma poiché questo sarà utilizzato in un'estensione per Firefox che utilizza un XPCNativeWrapper dietro ogni HTMLElement, non posso usare ".onsdragstart" e devono utilizzare ".addEventListener"

Il problema è l'equivalente al codice precedente non funziona. Cliccando e trascinando l'img trigger trascinamento immagine di default di Firefox, invece di ridimensionare la mia finestra il seguente:

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

sono le due righe di codice sopra citati non sono equivalenti?

contesto completa per gli oggetti non selezionabile:

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 
    } 

risposta

1
  1. ondragstart è un IE-unico evento, è per questo che non sta sparando in Firefox. UPDATE: è più complicato di così, per saperne di più qui: Javascript ondrag, ondragstart, ondragend
  2. se ondragstart erano disponibili in FF, si poteva prendere con x.ondragstart = ..., funziona in FF troppo.
  3. addEventListener è solo un modo più semplice di assegnare i gestori di eventi, è consente di allegare più di un gestore per un evento a un elemento. IE ha un sorf-of-equivalent chiamato attachEvent.

Informazioni sul problema: nei browser non IE, per rendere un oggetto non selezionabile, è necessario rilevare l'evento onmousedown e impedire il comportamento predefinito.

+0

1. L'evento viene attivato in entrambi i casi. Metto un avviso nella funzione e si spara. 2. Secondo http://help.dottoro.com/ljpncnwi.php ondragstart è disponibile in FF. Ma non posso usare x.ondragstart = a causa di XDCNativeWrapper. 3. Se addEventListener è più semplice, perché sostituire ".ondragstart" con ".addEventListener" mostra comportamenti diversi? Spara ancora, ma non sovrascrive il trascinamento predefinito di FF come fa .ondragstart. – TinyTimZamboni

+0

il comportamento predefinito può essere interrotto con la cattura del mouse – kapa

1

Non so perché function() { return false; } non funziona, ma so che function(event) { event.preventDefault(); } funzionerà in Firefox.

5

addEventListener registra un EventListener, che non ha alcun trattamento di codice di ritorno speciale.

Tornando falso dalla maggior parte dei gestori di eventi on*cancels the event per the HTML spec, in EventListener regolare questo si ottiene chiamando event.preventDefault() come Neil menzionato nella sua risposta.

+0

Questa è la risposta che vorrei accettare, ma questo progetto è stato da qualche tempo fa e mi piacerebbe tornare indietro e verificarlo prima. – TinyTimZamboni

Problemi correlati