2010-09-24 5 views
9

En utilisant jQuery, comment obtenir la valeur d'une zone de texte, puis charger une nouvelle page en fonction de la valeur?jQuery anchor preventDefault

Par exemple, permet de dire la zone de texte contient « bonjour » sur page1.php, comment puis-je modifier le comportement par défaut d'une balise d'ancrage maintenant charger le

suivant

page2.php? Txt = bonjour

Je donne les résultats suivants jusqu'à présent:

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

Répondre

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

Vous pouvez utiliser l'événement blur de la zone de texte, donc après que l'utilisateur a fini de taper l'ancre peut être mis à jour en utilisant le jQuery suivant:

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

Et juste changer le href de l'ancre. Ensuite, vous n'avez pas besoin de manipuler l'ancre click vous-même. L'ancre redirigera simplement vers "Page.php? Txt = Bonjour". Et cela assurera que le lien est toujours à jour et fonctionnera si l'utilisateur clique et sélectionne ouvert dans une nouvelle fenêtre.

Ou vous pouvez faire l'inverse et de gérer le clic de l'ancre:

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

Mais si l'utilisateur clique droit, cet événement ne se déclenche pas.

+0

Je ne vois pas vraiment un avantage d'utiliser 'blur' sur la manipulation du' click' directement. En fait, il semble que c'est la façon la plus inefficace de gérer la situation. Le clic se produit une fois par page alors que l'événement de flou peut se produire plusieurs fois. – BBonifield

+0

@BBonifield. Je suis d'accord avec toi. J'ai eu dans ma tête d'utiliser «flou», car cela garantirait que l'utilisateur a mis quelque contribution, ce qui est évidemment une idéologie imparfaite. C'est pourquoi j'ai ajouté la suggestion alternative (semblable à la vôtre), avec la variation de l'utilisation de l'action 'preventDefault' au lieu de l'action 'return false;' afin de permettre toute propagation. De plus, le flou fonctionnera si l'utilisateur clique correctement. – GenericTypeTea

+1

Ce n'est pas inefficace, juste que cela fonctionnera même si l'utilisateur clique droit sur le lien pour l'ouvrir dans un nouvel onglet par exemple. –

3

Définissez un événement de clic sur le point d'ancrage pour ajouter la chaîne de requête lors d'un clic.

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

Cette méthode utilise la méthode serialize de jQuery. Où le sélecteur est chaque entrée ou champ que vous voulez passer le champ à la page suivante. Bonne chance!

Inutile d'utiliser event.preventDefault.

+0

Si vous n'avez qu'une seule entrée, vous pouvez l'adresser seulement et obtenir sa valeur par $ ('# input'). Val(). Cela devrait être plus rapide s'il n'y a qu'une seule entrée. – Tim

Questions connexes