2012-03-07 7 views
5

Ho uno script JS che aggiunge alla pagina HTML le coppie: ingresso + ancoraggioAncora con "computerizzata" URL

Posso calcolare l'URL prima che il reindirizzamento avvenga?

ora ho link che assomiglia a questo:

<a href="#" onclick="myFunct();return false;">link</a> 

e myFunct utilizza window.location.href per reindirizzare pagina web. Il problema con questo approccio è che non posso (ovviamente) CTRL + fare clic sul collegamento per aprire il collegamento obiettivo in una nuova scheda.

Dettagli:

  • L'URL del link è noto dopo aver ottenuto l'URL dal server - Questa operazione è molto costoso per me e vorrei farlo solo nel caso in cui è assolutamente necessario.

  • L'idea è: utente sceglie un collegamento, lui/lei clic su di esso, url è ottenuto da server e utente viene reindirizzato (nella stessa finestra o in una nuova scheda se lui/lei usa CTRL + clic)

Grazie!

+1

Qual è la domanda? come calcolare un link? o come aprire un link javascript in una nuova scheda? o qualcos'altro ? non è molto chiaro – ManseUK

+0

Ho aggiornato la domanda. Spero sia chiaro ora. Mi dispiace per la confusione. –

+0

Non è ancora chiaro ... perché ottieni l'URL dal server? cosa stai passando al server? come stai ora? perché è "costoso"? – ManseUK

risposta

0

Ho risolto il problema con il calcolo preliminare del collegamento e l'ottimizzazione del codice per rendere l'overhead il più basso possibile.

3

Im non del tutto sicuro che questo è quello che state cercando per provare a dare la vostra ancora un id

<a href="#" id="mylink">link</a> 

poi basta aggiornare l'attributo href per modificare la nuova posizione (forse sul cambiamento su un ingresso?

<input onchange="changeLink(this)" value="http://www.google.com/"/> 

function changeLink(elem) { 
    var mylink = document.getElementById('mylink'); 
    mylink.href = this.value; // you could prepend your value with a domain 
} 

Ogni volta che il valore nel input cambia il href sarà cambiato per abbinare

+0

Non posso farlo perché se un utente vuole usare un collegamento ho bisogno di contattare il server con informazioni aggiuntive che richiedono tempo. Detto questo il problema è più generale. –

+0

@MartyIX è possibile disabilitare il collegamento fino al suo aggiornamento ... perché non inserire tutti i dettagli nella domanda all'inizio ... – ManseUK

+0

Ma per preparare un collegamento richiede tempo (ho bisogno di contattare il server) e io don ' Voglio farlo in modo proattivo. –

0

È possibile creare tutti i link al caricamento della pagina

function myFunct(link) 
{ 
    return 'http://' + link + '#hash'; 
} 

$('a').each(function(){ 
    $(this).attr('href', myFunct($(this).text())); 
});​ 

Demo http://jsfiddle.net/MpM6Y/

Aggiornamento

Si può fare lo stesso senza jQuery (e più dolore) usando var a_list = document.getElementsByTagName('a'); e un ciclo sopra a_list con a.href = myFunct(a.innerHTML);

+1

Stai usando jQuery qui ... nessun tag jQuery sulla domanda – ManseUK

+0

Sì, lo so e io mi dispiace per quello. Comunque spero che tu abbia l'idea. – PiTheNumber

+0

Ok, ho aggiunto alcuni elementi JS puri di cui hai bisogno. – PiTheNumber

3

invece di navigare con onmousedown, puoi semplicemente riscrivere l'href

<a href='http://www.google.com' id='computed_link' onmousedown='handleClick()'>Computed Link!!</a> 
<script type='text/javascript'> 
function handleClick() 
{ 
    document.getElementById('computed_link').href = 'http://www.yahoo.com'; 
} 
</script> 
+0

Idea interessante ma non funziona http://jsfiddle.net/PNEvr/ – PiTheNumber

+0

Certo che lo fa. Quello era un esempio dello strumento che non funziona ... non lo script :) http://tryross.com/travistest/anchor-with-computed-url.html – trex005

+0

Non funziona con CTRL + clic. –