2017-05-09 7 views
-1

Ich verwende derzeit window.location.href.indexOf in meinem aktuellen Projekt. Ich habe bemerkt, dass es nicht richtig zu funktionieren scheint. Zum Beispiel diesen Code, den ich gemacht habe.window.location.href.indexOf funktioniert nicht richtig

$(document).ready(function() { 

    //Show Sign Up drawer if user clicks on referral link 
    //It will show the Sign Up drawer once the word "referral" is found in the URL 
    if (window.location.href.indexOf("?referral") > -1) { 
    console.log('Sign Up Drawer'); 
    $(".header-form-container.signup").addClass("show"), 
    } 
}); 

Dieser Code, was es tut, ist eine Klasse in einem Element hinzuzufügen, wenn das Wort referral in der URL zu finden ist. Die hinzugefügte add-Klasse wird dann eine Anmeldeschublade verschieben. Hier ist, was beim Testen passiert ist.

In meinem ersten Test habe ich versucht, das Wort referral in die URL einzufügen. in dem Wort und durch Drücken der Taste Enter Nach der Eingabe, die Javascript-I auslösen zu laufen bin versucht nicht

enter image description here

Aber nach dem Browser aktualisieren oder das Wort wieder einlegen es funktioniert jetzt. Es zeigt derzeit den Anmeldebereich an.

enter image description here

Wie kann ich sicherstellen, dass der Code window.location.href.indexOf im ersten Versuch funktioniert oder ohne wieder den Browser zu aktualisieren. Die Website ist auf einem eckigen Rahmen

+1

Und wie legen Sie es ohne die Seite zu aktualisieren. Natürlich müssen Sie es auffrischen. – dfsq

+0

Verwenden Sie ein JavaScript-Framework oder einen Router, der die '# /' in die URL setzt? – charlietfl

+0

Ja, es läuft auf einem eckigen Rahmen – clestcruz

Antwort

0

Es funktioniert nicht, weil Ihr Skript (z. B. main.js) wird nur einmal beim Laden der Seite ausgeführt.

Sie könnten window.history verwenden, um den Browserverlauf zu bearbeiten. Sie können mit pushState()

History API

Hoffe, dass es hilft, die Query-String aktualisieren.

+0

Was meinst du mit meinem Skript wird nur einmal ausgeführt? – clestcruz

+0

Es sollte funktionieren, weil es es tut, wenn die Seite lädt, also keine Notwendigkeit, zu aktualisieren, wird diese Antwort nicht richtig erklärt –

+0

Ich meine Ihren Code nur einmal ausgeführt, wenn die Seite geladen wird. –

2

Wenn Sie nur die URL das Zeichen # nach ändern, wird die Seite nicht neu laden, da Sie den Ankerteil der URL nur sind zu ändern.
Ihr in $(document).ready(function() { ... verpackter Code wird nur einmal ausgeführt, wenn die Seite geladen wird.

Was Sie tun möchten, ist ein Listener für das Routenänderung Ereignis hinzuzufügen und Ihren Code in diesem Handler, etwa wie folgt ausführen:

$rootScope.$on("$routeChangeSuccess", function() { 
    if (window.location.href.indexOf("?referral") > -1) { 
    console.log('Sign Up Drawer'); 
    $(".header-form-container.signup").addClass("show"), 
    } 
}); 
+0

Also muss ich es nur außerhalb der '$ (document) verschieben .ready (function() {...'? – clestcruz

+0

@clestcruz Nein, dann würde es nur einmal ausgeführt werden, noch bevor die Seite geladen wurde. Was Sie brauchen tun ist, einen Listener für eine Route zu ändern, ändern in Angular und führen Sie Ihren Code in der Handler –

+0

Lassen Sie mich es versuchen, ich bin nicht sehr vertraut mit eckigen seit das Projekt wurde nur mir übergeben – clestcruz