2012-04-18 13 views
11

Attualmente sto facendo un filebrowser. Se l'utente fa clic su un collegamento a un file, apre una piccola finestra e chiede le opzioni (come download e visualizzazione). L'ho fatto usando l'attributo onclick. Se clicco sul link, viene eseguito javascript, ma in seguito si apre l'url specificato in href. Quello che sto cercando di fare è: se si fa clic sul link javascript viene eseguito e in avanti si alla fine. Ma se il collegamento si interrompe correttamente, la "posizione del collegamento alla copia" dovrebbe essere ancora disponibile. Sto pensando di risolvere questo bloccando il forward scriptside. Quindi, se il collegamento viene eseguito correttamente, non viene eseguito javascript ed è possibile copiare il percorso del collegamento. Ma se hai lasciato clic sul collegamento viene eseguito javascript e il collegamento non viene aperto. È possibile con javascript o esiste un altro modo per ottenere questo comportamento?html - Come impedire al browser di aprire il link specificato in href?

risposta

14

Per impedire l'esecuzione del collegamento, un modo è consentire al metodo "onclick" di restituire false.

Ad esempio:

<a href="http://..." onclick="return clickfunc()">...</a> 

If clickfunc() rendimenti false, un clic sul link non dirigeranno a "http: // ..."

Anche se si sono probabilmente maneggiarlo più come

<a href="http://..." id="somebutton">...</a> 
<script> 
document.getElementById('somebutton').onclick = function() { 
     ... 
     else { return false; } 
}; 
</script> 
+4

Javascript! = JQuery. In jQuery return false significa "stop propagation e prevent default", ma in Javascript significa semplicemente "stop propagation" (che non interromperà l'azione predefinita di click-link). Vedi http://www.w3.org/TR/DOM-Level-3-Events/#events-event-type-stopImmediatePropagation – machineghost

+0

E come nota a margine, non sono sicuro che return false lo faccia anche in tutti i browser; la specifica che ho collegato era "DOM Level 3" e AFAIK IE8 non ha nemmeno implementato completamente quella specifica. – machineghost

+0

Non mi riferisco a jQuery in alcun modo.Quando creo un link 'Test', non fa nulla quando si fa clic su tutti i browser che ho a disposizione per il test. Non ero consapevole che restituire il falso fosse una cattiva pratica o che non funzionasse in circostanze fino ad ora. Se lo è, mi scuso, ma per favore fornisci una risorsa più comprensibile o indicami la voce corretta - Non posso estrarre nulla di rilevante qui dal tuo link. – Armatus

0

Sì, è necessario prevent the default action dell'evento. Puoi farlo restituendo false nel tuo attributo onclick.

+1

Javascript = jQuery. In jQuery return false significa "stop propagation e prevent default", ma in Javascript significa semplicemente "stop propagation" (che non interromperà l'azione predefinita di click-link). Vedi http://www.w3.org/TR/DOM-Level-3-Events/#events-event-type-stopImmediatePropagation – machineghost

+0

E come nota a margine, non sono sicuro che return false lo faccia anche in tutti i browser; la specifica che ho collegato era "DOM Level 3" e AFAIK IE8 non ha nemmeno implementato completamente quella specifica. – machineghost

+0

No, non ho detto eventListener (e niente su jQuery), intendevo l'attributo onclick utilizzato dall'OP. – Bergi

7

si deve evitare che di default dalla funzione di clic:

function stopDefAction(evt) { 
    evt.preventDefault(); 
} 
+2

Questa risposta è più vicina alla correzione rispetto alle altre, ma come ho commentato su di esse, return false NON equivale a prevenire il default in Javascript non elaborato (equivale a stopPropagation()). Quindi la tua risposta di preventDefault è l'unica corretta (return false non lo taglierà). – machineghost

+0

Grazie, cambiando la risposta. –

+0

:-) nessun problema! – machineghost

1

è possibile sostituire attributo href dal testo "javascript: void (0)", per esempio:!

<a href="http://..." id="somebutton">...</a> 
<script> 
document.getElementById('somebutton').href="javascript:void(0)" 
</script> 
+0

Ho provato questo, ma non ha funzionato. Ottengo la finestra del browser vuota – Ziggler

Problemi correlati