onClick Link später aufrufen

  • Hallo liebe Forummitglieder,


    ich hab folgendes Problem...


    ein IMG soll verlinkt werden, aber nicht gleich nach dem Klick. Es wird zuerst etwas abgefragt...


    <a href="www.beispiel.at" id="link" target="_blank" onclick="return false;"><img id="1" src="1.gif"></a>


    mithilfe von onclick="return false;" wird der Link nach dem Klick nicht aufgerufen.
    Hab zwei if-Abfragen - erst wenn diese nicht erfüllt werden, soll der Link aufgerufen werden.


    Ich dachte das geht so:
    else {
    var link = document.getElementById('link');
    link.setAttribute("onclick", "return true");
    }


    ... aber es funktioniert leider nicht.


    Ich hoffe ihr könnt mir weiterhelfen.


    Danke und lG,
    Mieze

  • Dafür brauchst du das location Objekt:


  • Vielen Dank!! Das funktioniert.
    Aber jetzt hab ich ein Folgeproblem.


    Ich hab einige IMGs (Adventkalender) mit der ID "link".


    <a href="www.beispiel1.at" id="link" target="_blank" onclick="return false;"><img id="1" src="1.gif"></a>
    <a href="www.beispiel2.at" id="link" target="_blank" onclick="return false;"><img id="2" src="2.gif"></a>
    <a href="www.beispiel3.at" id="link" target="_blank" onclick="return false;"><img id="3" src="3.gif"></a>
    usw.


    Und egal welches IMGs ich jetzt anklicke, es öffnet sich immer der Link vom ersten IMG...
    Wie kann ich im else sagen dass er mir den Link des geklickten IMGS (und nicht den Link des ersten IMGs) ausgibt?


    else {


    var url = document.getElementById("link").getAttribute("href");
    window.location.href = url;


    }



    Hoff das ist verständlich...


    lG
    Mieze

  • Hei,


    du hast da einen grundlegenden Fehler drin. Eine ID sollte auf jeder Seite nur ein mal verwendet werden. Willst du mehrere Elemente mit gleichen CSS Eigenschaften versehen, solltest du class statt id nutzen.


    Das onclick Attribut solltest du ebenfalls nicht nutzen. Events fängt man besser mit JavaScript Code ab, ich zeige dir gleich wie das geht.


    Das ist jetzt vermutlich viel Input auf ein mal aber wenn du dich etwas durch arbeitest wirst du sicher alles verstehen können. Ansonsten frag einfach nach. Verwendet werden Arrays, EventListener, das event Objekt und das window Objekt. Alles sehr grundlegende Dinge.



    Den HTML Code natürlich auch anpassen. Id durch class ersetzen und das onclick Attribut entfernen:


    HTML
    <a href="www.beispiel1.at" class="link" target="_blank"><img id="1" src="1.gif"></a>
    <a href="www.beispiel2.at" class="link" target="_blank"><img id="2" src="2.gif"></a>
    <a href="www.beispiel3.at" class="link" target="_blank"><img id="3" src="3.gif"></a>
  • Vielen Dank Basti,


    soweit hab ich es verstanden. In der Umsetzung scheitert es ein bisschen.


    Folgendes, hier ein kleiner Auszug der Kästchen:




    Ich glaub das Problem liegt bei der onclick-Funktion in den jeweiligen Divs der Klasse "Tage".
    Die Geklickt-Funktion ist da um abzufragen, ob es es schon soweit ist (Adventskalender), wenn nicht wird ein Info-Popup ausgegeben. Wenn es soweit ist öffnet sich der Link.
    Momentan öffnet sich die Info und der Link. Es liegt bestimmt an den beiden Funktionen. Irgendwo hab ich da einen Denkfehler.




    Habe das Problem, das ich nicht weiß wie ich die beiden Funktionen "unter einen Hut bekomme". Deine validateUrl-Funktion könnte ich eigentlich in die "Geklickt"-Funktion aufnehmen oder? event.preventDefault(); scheint nicht zu funktionieren.


    Momentan habe ich es so, aber ich weiss das das falsch ist :D




    Danke + lG mieze

  • Es ist etwas schwierig deinen Code nachzuvollziehen, da er unvollständig zu sein scheint. Kannst du deinen Code noch mal möglichst vollständig zeigen und grob erklären was passieren soll?

  • Hi,


    ja na klar.
    Kannst du mir nur kurz sagen wie ich den Quellcode hier schön reinbekomme?
    Er hat mir wie ich sehe den letzten nicht richtig formatiert bzw keine zeilenumbrüche gemacht (etwas unübersichtlich - sorry)

  • ok alles klar :)


    also ich versuchs so verständlich wie möglich zu erklären..


    hier nochmal kurz zum problemfall:
    es geht eben um einen adventkalender mit 24 kästchen. wenn man das jeweilige kästchen des aktuellen tages drückt soll sich dieses öffnen bzw. wird auf einen gutschein verlinkt. wenn man das falsche kästchen drückt (tag in der zukunft) soll sich dieser link eben nicht öffnen - anstatt dessen ein extra fenster mit der info dass es noch nicht zeit dafür ist... das funktioniert ausser, dass sich der link bei allen zukünftigen tagen schon öffnet. das hatte ich anfangs durch onclick="return false;" gelöst wo du mir ja mit deiner hilfe schon etwas weitergeholfen hast.


    jedoch funktioniert es leider noch immer nicht, da es noch eine weitere funktion gibt, die diese if anweisungen schon beinhaltet und ich nicht weiß wie ich die funktion jetzt aufbauen soll damit sich der link eben nicht öffnet.
    so... also ich habe ein datumfunktion (anzeige aktuelles datum und wieviele tage bis zum 24.12., usw).


    dann habe ich ein array für die einzelnen kalenderbilder (bild mit nummer)


    JavaScript
    StartArr = new Array()
    
    
    
    
    StartArr[1] = "pic-01/1.jpg";
    StartArr[2] = "pic-01/2.jpg";
    StartArr[3] = "pic-01/3.gif";
    StartArr[4] = "pic-01/4.gif";
    StartArr[5] = "pic-01/5.gif";


    usw... dann ein Array für das kästchen wenn es geöffnet wird (hintergrundbild)


    JavaScript
    ImageArr = new Array()
    
    
    
    
    ImageArr[1] = "pic-03/1.gif";
    ImageArr[2] = "pic-03/2.gif";
    ImageArr[3] = "pic-03/3.gif";
    ImageArr[4] = "pic-03/4.gif";
    ImageArr[5] = "pic-03/5.gif";


    JavaScript
    var KlickDatum = new Date();
    var KlickMonat = KlickDatum.getMonth();
    var KlickTag = KlickDatum.getDate();


    und dann die besagte funktion mit der if anweisung wenn noch nicht november ist dann gib mir eine andere datei aus als wenn es schon november ist und nicht mehr so lange dauert bis dezember ist. anderen falls sollte eben der link aufgehen! das habe ich momentan in der funktion "validateUrl". da ich kein javascript profi bin weiß ich jetzt nicht wie ich deine funktion in die Geklickt-Funktion bekomme. Denn in dieser Funktion wird die KlickZahl übergeben. Diese kommt von onClick im HTML Code (s.unten).




    usw.



    Hoff du kennst dich jetzt eher aus was ich meine
    hi Basti,


    weißt du da schon was?


    lg

  • Hei,


    du kannst deine "Gecklickt" Funktion einfach anstelle der "validateUrl" Funktion nutzen. Du kannst in dem Fall keine Zahl mit übergeben, da deine div Elemente allerdings id's mit Nummern haben kannst du die einfach auslesen:


  • ok.. stimmt.


    anbei der code


  • Dein Javascript Code wird ausgeführt bevor dein HTML Code geladen ist, darum kann der Eventlistener nicht korrekt gesetzt werden. Du musst deinen gesamten Javascript Code hinter den HTML Code schreiben oder in folgende Funktion packen:

    JavaScript
    window.onload = function() 
    {
        // Dein Code
    }


    Außerdem musst du bedingt deines HTML Aufbaus Zeile 276 anpassen:

    JavaScript: 276
    var KlickZahl = parseInt(Element.getAttribute("id").replace(/^\D+/g,'')); // Geht nicht
    JavaScript: 276
    var KlickZahl = parseInt(Element.getElementsByTagName("img")[0].getAttribute("id").replace(/^\D+/g, '')); // Geht

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!