2017-01-03 4 views
5

Ich arbeite an einer Webanwendung, die onHashChange Event-Listener in einigen Situationen verwendet und manuell auf einen Link mit href="#hash" funktioniert perfekt funktioniert. Aber wenn ich trigge, klicken Sie auf den gleichen Link mit jQuery $('a[href=#"hash"]').trigger('click') oder $('a[href=#"hash"]').click() Hash in der Adressleiste ändert sich nicht.Triggering klicken Sie auf einen Link ändert sich nicht Speicherort Hash

Ist es etwas, was ich falsch mache? oder sollte ich eine andere Methode für diesen Zweck verwenden?

HTML

<a href="#hash">Do Something</a> 

JS

// Not working 
$('a[href="#hash"]').click(); 

// Not working 
$('a[href="#hash"]').trigger('click'); 
+0

Können Sie dies mit einer Geige demonstrieren? – Anubhav

+0

Haben Sie 'preventDefault()' in Ihrem Click-Handler? – AndFisher

+1

Dumme Frage. Warum einen Klick auf den Link auslösen? Warum nicht alles programmatisch handhaben? – allnodcoms

Antwort

1

Was Sie geschrieben hat, ist wahr (es ist genug jQuery Quellcode zu debuggen): der Ereignisauslöser Klick funktioniert nicht auf einem Anker.

Um zu erreichen, was Sie Sie versuchen, den Klick das DOM-Element erhalten und dann Feuer:

$('a[href="#hash"]').get(0).click() 

Dieses nur funktionieren wird.

2

Die click Methode (wenn sie von jquery verwendet) löst die click Ereignisse, die Ihnen die Verwendung von Register el.click(function.. und el.on('click', function...

Sie können einen neuen MouseEvent und versenden sie direkt an das entsprechende Element erstellen:

e = document.createEvent('MouseEvents'); 
e.initEvent("click", true, true); 
$('a[href="#hash"]')[0].dispatchEvent(e) 

Der obige Code wird

Oder benutzen Sie einfach die click Fall in Chrome, Firefox und IE arbeiten das Element (die jQuerys nicht click Funktion verwenden, aber der click Funktion des Browsers):

$('a[href="#hash"]')[0].click() 

Beachten Sie, dass dieser Code aus Sicherheitsgründen möglicherweise nicht in mehreren Browsern funktioniert.

+0

Ist das nicht der eigene Trigger-Klick von jQuery? –

+0

Die Antwort mit mehr Informationen aktualisiert – Dekel

+0

Sorry, aber ich verstehe nicht. Wenn ich triggere, klicke auf einen Link mit einer tatsächlichen (URL) href, die Orte werden in die angegebene href geändert. Aber es funktioniert nicht mit einem Nur-Hash-Hash. Warum das? Sie schlagen vor, ein neues Ereignis für einen Klick zu erstellen, aber ich möchte wissen, warum Klick nicht dasselbe tut! –

4

Neuer Typ hier hoffentlich nicht ein Azz von sich selbst machen. Ich dachte nur, dass etwas in diesem Code, den ich auf meiner Website verwende, Ihnen vielleicht helfen könnte. Es scheint irgendwie ähnlich zu dem, was Sie beschreiben.

$(document).ready(function(){ 
    $('a[href^="#"]').on('click',function (e) { 
    e.preventDefault(); 

    var target = this.hash; 
    var $target = $(target); 

    $('html, body').stop().animate({ 
     'scrollTop': $target.offset().top 
    }, 900, 'swing', function() { 
     window.location.hash = target; 
    }); 
    }); 
    }); 
+0

Sie ändern also manuell den Standort-Hash, richtig? Ich frage mich, warum Klick-Trigger-Methode nicht das gleiche tut? Sobald Sie 'trigger ('click')' auf einem Element aufrufen, wird alles vom Benutzer angeklickt, aber die URL ändert sich beim manuellen Klick und nicht beim Trigger! –

+0

Ich wusste nicht über anchor.hash +1 – Musa

+0

Wie ich schon sagte. Es schien einfach ähnlich zu dem, was ich las und ich hoffte, dass dort etwas eine Lösung auslösen würde! Es tut uns leid. Ich wünschte, ich könnte mehr helfen. Ich weiß nicht, was Sie mit manuell meinen. Die JS funktioniert einfach, nachdem Sie nur die Positionen in HTML markiert haben. Es ist hier auf [Codepen] (http://codepen.io/awaybackhome/full/WomzKM/) – awaybackhome

Verwandte Themen