Comment changer le href de la balise <a> lors d'un clic sur le bouton via javascript

127

Comment changer la hrefvaleur d'attribut d'une <a/>balise via Javascript lors d'un clic sur un bouton?

<script type="text/javascript">
  function f1()
  {
    document.getElementById("abc").href="xyz.php"; 
  }
</script>

<a href="" id="abc">jhg</a>
<a href="" id="" onclick="f1()">jhhghj</a>
Chauhan
la source
La voie de l'accessibilité impose de ne pas utiliser les liens de cette manière. Ici: xkr.us/js/links
Consultation gratuite du

Réponses:

177

Sans avoir de href, le clic rechargera la page actuelle, vous avez donc besoin de quelque chose comme ceci:

<a href="#" onclick="f1()">jhhghj</a>

Ou empêchez le défilement comme ceci:

<a href="#" onclick="f1(); return false;">jhhghj</a>

Ou return falsedans votre f1fonction et:

<a href="#" onclick="return f1();">jhhghj</a>

.... ou, de manière discrète:

<a href="#" id="abc">jhg</a>
<a href="#" id="myLink">jhhghj</a>

<script type="text/javascript">
  document.getElementById("myLink").onclick = function() {
    document.getElementById("abc").href="xyz.php"; 
    return false;
  };
</script>
Nick Craver
la source
suggérer d'ajouter event && event.preventDefault && event.preventDefault();avantreturn false
袁文涛
34

Exactement ce que Nick Carver a fait là-bas, mais je pense qu'il serait préférable d'utiliser la méthode DOM setAttribute.

<script type="text/javascript">
   document.getElementById("myLink").onclick = function() {
   var link = document.getElementById("abc");
   link.setAttribute("href", "xyz.php");
   return false;
   }
</script>

C'est une ligne de code supplémentaire mais trouvez-la mieux en termes de structure.

Jakobhans
la source
8
IMO il n'y a pas besoin ici, cela a été une propriété DOM depuis toujours, .hreffonctionne dans tous les navigateurs ... par exemple, utiliseriez-vous .getAttribute("id")au lieu de juste .id? :)
Nick Craver
3
Vous avez raison, cela ne fait rien de spécial ou de différent, c'est juste structurel. J'aime avoir toutes mes fonctions DOM de cette façon pour un débogage / révision ultérieur: il m'est plus facile de voir ce que fait la fonction avec ces méthodes. Évidemment, votre réponse est juste sur l'argent :)
jakobhans
7

supprimer l' hrefattribut:

<a id="" onclick="f1()">jhhghj</a>

si les styles de lien sont importants, alors:

<a href="javascript:void(f1())">jhhghj</a>
atlavis
la source
1
une <a>balise sans hrefattribut? quoi? Pourquoi?
Shikiryu
1
Oublier le href changera son style et son comportement. Il agit alors comme une ancre au lieu d'un lien.
Cobra_Fast
1
Merci pour la réponse, vous m'aidez vraiment.
Chauhan
1
aucun href en fait une ancre, le clic convertit en lien, assez normal
Consultation gratuite
1
<a href="#" id="a" onclick="ChangeHref()">1.Change 2.Go</a>

<script>
function ChangeHref(){
document.getElementById("a").setAttribute("onclick", "location.href='http://religiasatanista.ro'");
}
</script>
user3325593
la source
0

Pour modifier dynamiquement un lien en cliquant dessus:

<input type="text" id="emailOfBookCustomer" style="direction:RTL;"></input>
        <a 
         onclick="this.href='<%= request.getContextPath() %>/Jahanpay/forwardTo.jsp?handle=<%= handle %>&Email=' + document.getElementById('emailOfBookCustomer').value;" href=''>
    A dynamic link 
            </a>
Mohsen Abasi
la source
0

Voici mon point de vue. J'avais besoin de créer une URL en collectant la valeur à partir d'une zone de texte, lorsque l'utilisateur appuie sur un bouton Soumettre.

<html>
<body>

Hi everyone

<p id="result"></p>

<textarea cols="40" id="SearchText" rows="2"></textarea>

<button onclick="myFunction()" type="button">Submit!</button>

<script>
function myFunction() {
    var result = document.getElementById("SearchText").value;
	document.getElementById("result").innerHTML = result;
	document.getElementById("abc").href="http://arindam31.pythonanywhere.com/hello/" + result;
}		
</script>


<a href="#" id="abc">abc</a>

</body>
<html>

Arindam Roychowdhury
la source
-1

Je connais son vieux post. Pourtant, cela pourrait aider quelqu'un.

Au lieu de tag, si possible, vous pouvez également le faire.

 <script type="text/javascript">
        function IsItWorking() {
          // Do your stuff here ...
            alert("YES, It Works...!!!");
        }
    </script>   

    `<asp:HyperLinkID="Link1"NavigateUrl="javascript:IsItWorking();"`            `runat="server">IsItWorking?</asp:HyperLink>`

Des commentaires à ce sujet?

4u.Ans
la source