2017-01-03 14 views
5

Pracuję nad aplikacją internetową, która korzysta z detektora zdarzeń onHashChange w niektórych sytuacjach, a ręczne kliknięcie łącza z href="#hash" działa doskonale. Ale kiedy uruchamiam kliknięcie tego samego łącza przy użyciu jQuery's $('a[href=#"hash"]').trigger('click') lub $('a[href=#"hash"]').click(), hash w pasku adresu nie ulega zmianie.Wywołanie kliknięcia łącza nie powoduje zmiany hasza lokalizacji

Czy to coś, co robię źle? czy w tym celu powinienem użyć innej metody?

HTML

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

JS

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

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

Czy możesz to udowodnić za pomocą skrzypiec? – Anubhav

+0

Czy 'preventDefault()' w twojej obsługi kliknięcia? – AndFisher

+1

Głupie pytanie. Dlaczego wywołać kliknięcie linku? Dlaczego nie poradzić sobie z tym wszystkim programowo? – allnodcoms

Odpowiedz

1

To, co napisałeś, jest prawdziwe (wystarcza do debugowania kodu źródłowego jQuery): zdarzenie kliknięcia spustu nie działa na kotwicy.

W celu osiągnięcia tego, co próbujesz można uzyskać elementu DOM, a następnie pożaru kliknij:

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

To dopiero będzie działać.

2

click metoda (gdy jest stosowany przez jquery) wyzwala click wydarzenia, które można zarejestrować za pomocą el.click(function.. i el.on('click', function...

Można utworzyć nowy MouseEvent i wysyłają je bezpośrednio do danego elementu:

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

Powyższy kod będzie działał w Chrome, Firefox i IE

lub po prostu użyć zdarzenia click z element (który nie będzie używać funkcji jquery's click, ale funkcja przeglądarki click):

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

Pamiętaj, że ten kod może nie działać w kilku przeglądarkach ze względów bezpieczeństwa.

+0

Czy to nie własne kliknięcie spustu jQuery? –

+0

Zaktualizowano odpowiedź, podając więcej informacji. – Dekel

+0

Przepraszam, ale nie rozumiem. Jeśli uruchomię kliknięcie na link z faktycznym (url) href, lokalizacje zostaną zmienione na podany href. Ale nie działa z hash-only href. dlaczego? Sugerujesz utworzenie nowego wydarzenia dla kliknięcia, ale chcę wiedzieć, dlaczego kliknięcie nie robi tego samego! –

4

Nowy facet, mam nadzieję, że nie zrobi z siebie samego. Pomyślałem, że może coś z tego kodu, którego używam na mojej stronie, może ci pomóc. Wygląda trochę podobnie do tego, co opisujesz.

$(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

Czyli ręcznie zmieniasz skrót lokalizacji, prawda? Zastanawiam się, dlaczego metoda wyzwalacza kliknięcia nie działa tak samo? Po wywołaniu 'wyzwalacza (" kliknięcia') 'na elemencie, wszystko jest po kliknięciu przez użytkownika, ale zmiany adresu URL dotyczą ręcznego kliknięcia, a nie wyzwalacza! –

+0

Nie wiedziałem o anchor.hash +1 – Musa

+0

Tak jak powiedziałem. Wydawało mi się podobne do tego, co czytałem, i miałem nadzieję, że coś takiego wywoła rozwiązanie! Przepraszam. Chciałbym móc więcej pomóc. Nie wiem, co masz na myśli ręcznie. JS działa po prostu po zaznaczeniu #lokacji w HTML. Tu jest na [codepen] (http://codepen.io/awaybackhome/full/WomzKM/) – awaybackhome

Powiązane problemy