2010-09-24 14 views
9

Utilizzando jQuery, come si ottiene il valore da una casella di testo e quindi si carica una nuova pagina in base al valore?jQuery anchor preventDefault

Ad esempio, consente di dire la casella di testo contiene "ciao" in page1.php, come faccio a cambiare il comportamento di default di un tag di ancoraggio ad ora caricare i seguenti

page2.php? Txt = ciao

ho il seguente finora:

<script type="text/javascript"> 
    $(document).ready(function(){ 
    $("a.mylink").click(function(event){ 
     alert("link clicked"); 
     event.preventDefault(); 
    }); 
}); 
</script> 

risposta

18

Html

<input type="text" id="demoQuery" /> 
    <a id='demoLink' href='javascript:'>Iam a link</a> 

Javascript

jQuery('#demoLink').bind('click',function(e){ 
     e.preventDefault(); 
     document.location.href="someUrl.php?text="+ jQuery('#demoQuery').val();  
}); 
4

è possibile utilizzare l'evento blur della casella di testo, in modo da dopo che l'utente ha finito di scrivere l'ancora può essere aggiornato utilizzando il seguente jQuery:

$("#textBoxId").blur(function() { 
    var text = $(this).val(); 
    var end = text.length == 0 ? "" : "?txt=" + text; 
    $("a.mylink").attr("href", "Page2.php" + end); 
}); 

E basta cambiare l'href dell'ancora. Quindi non è necessario gestire l'ancora click da soli. L'ancora si limiterà a "Page.php? Txt = Ciao". E questo garantirà che il collegamento sia sempre aggiornato e funzionerà se l'utente fa clic con il tasto destro del mouse e seleziona l'apertura in una nuova finestra.

Oppure si potrebbe fare il contrario e gestire il clic dell'ancora:

$("a.mylink").click(function(e) { 
    var text = $("#textBoxId").val(); 
    document.location.href = $(this).attr("href") + "?txt=" + text; 
    e.preventDefault(); 
}); 

Ma se gli scatti giusti utente, questo evento non scatta.

+0

io non vedo un vantaggio di utilizzare 'blur' sopra la manipolazione del' direttamente click'. In realtà, sembra che sia il modo più inefficiente per gestire la situazione. Il clic si verifica una volta per pagina mentre l'evento sfocatura potrebbe verificarsi più volte. – BBonifield

+0

@BBonifield. Sono d'accordo con te. Avevo nella mia testa l'uso di 'blur' in quanto avrebbe garantito che l'utente avesse inserito qualche input, che è ovviamente un'ideologia imperfetta. Quindi perché ho aggiunto il suggerimento alternativo (simile al tuo), con la variazione dell'uso di 'preventDefault' invece della coperta' return false; 'azione al fine di consentire qualsiasi propagazione. Inoltre, la sfocatura funzionerà se l'utente fa clic con il pulsante destro del mouse. – GenericTypeTea

+1

Non è inefficiente, solo che funzionerà anche se l'utente fa clic con il tasto destro sul link per aprirlo in una nuova scheda, ad esempio. –

3

Impostare un evento click sul tag anchor per aggiungere la stringa di query quando viene fatto clic.

$('a').click(function() { 
    var querystring = $('input').serialize(); 
    this.href += querystring; 
}); 

Questo utilizza il metodo serialize di jQuery. Dove il selettore è ogni input o campo, vuoi passare il campo alla pagina successiva. In bocca al lupo!

Non è necessario utilizzare event.preventDefault.

+0

Se si dispone di un solo input, è possibile consultarne solo uno e ottenere il relativo valore da $ ('# input'). Val(). Dovrebbe essere più veloce se c'è solo un input ... – Tim