2 Stimmen

HREF eines Links mit JQuery geändert, neuer Link funktioniert nicht

Ich bin ziemlich neu in JQuery und Javascript im Allgemeinen. Ich glaube nicht, dass ich versuche, etwas zu tun zu Das ist schwierig, aber ich bin ratlos.

Ich habe eine Reihe von Links auf meiner Seite, die beim Anklicken ein bestimmtes Verhalten auf der Seite auslösen. Wenn sie erneut angeklickt werden, sollen sie zu einer anderen Seite springen, aber mit meinem aktuellen Code tun sie nichts.

Ich vermute, dass es eine wirklich einfache Lösung für dieses Problem gibt, aber ich finde sie nicht.

Ich habe ein einfaches Beispiel (mit denselben Problemen) hier eingestellt: http://jsbin.com/egaji3/edit . Der Code ist auch unten eingefügt.

JS:

$('a.dummy').click(function(){
  var myquery = $(this).attr('title');
  $('p#output').text('You clicked on the ' + myquery + '. Click again to Google it.');
  $('a').addClass('dummy');
  $('a').attr('href', '#'); 
  $(this).removeClass('dummy');
  $(this).attr('href', 'http://www.google.com.au/#q=' + myquery); 
  return false;
});

HTML:

<!DOCTYPE html>
<html>
<head>
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
<style>
  a { color: #00f; background: #ff0; }
  a.dummy { color: #999; background: none; }
</style>
</head>
<body>
  The things: 
  <a class="dummy" href="#" title="first thing">First Thing</a>
  <a class="dummy" href="#" title="second thing">Second Thing</a>
  <a class="dummy" href="#" title="third thing">Third Thing</a>  
  <p id="output">You haven't clicked anything yet!</p>
</body>
</html>

1voto

cletus Punkte 596503

Sie haben weiter erklärt, dass Sie möchten, dass der erste Klick den Link setzt und der zweite den Link ansteuert.

Ihr Problem ist dann, dass, wenn Sie den Ereignishandler binden, er gebunden bleibt, obwohl Sie die dummy Klasse. Die einfachste Lösung ist die Verwendung von live() stattdessen:

$("a.dummy").live("click", function() {
  var myquery = $(this).attr('title');
  $('p#output').text('You clicked on the ' + myquery + '. Click again to Google it.');
  $('a').addClass('dummy');
  $('a').attr('href', '#'); 
  $(this).removeClass('dummy');
  $(this).attr('href', 'http://www.google.com.au/#q=' + myquery); 
  return false;
});

bind() (wie implizit aufgerufen von click() es un statische Bindung . live() aktualisiert, so dass der Event-Handler nicht mehr aufgerufen wird, sobald Sie die Dummy-Klasse entfernen.

Ein alternativer Ansatz ist die Verwendung von one() , die nur einmal aufgerufen wird:

$("a.dummy").one("click", function() {
  var myquery = $(this).attr('title');
  $('p#output').text('You clicked on the ' + myquery + '. Click again to Google it.');
  $('a').addClass('dummy');
  $('a').attr('href', '#'); 
  $(this).removeClass('dummy');
  $(this).attr('href', 'http://www.google.com.au/#q=' + myquery); 
  return false;
});

1voto

takteek Punkte 6920

Nachdem Sie die href ändern die Klick-Handler ist immer noch beigefügt. Da Sie false zurückgeben, stoppt es die Link-Navigation. Wenn Sie nur den Handler mit unbind('click') nach dem ersten Klick entfernen, wird es funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X