2017-05-09 296 views
-1

我目前在當前項目中使用window.location.href.indexOf。我注意到它似乎不能正常工作。例如我製作的這段代碼。window.location.href.indexOf無法正常工作

$(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"), 
    } 
}); 

此代碼它的作用是在一個元素添加一個類,如果這個詞referral在URL中找到。插入的添加類將隨後滑動註冊抽屜。這是測試過程中發生的事情。

在我的第一個測試中,我嘗試在網址中插入單詞referral。在單詞鍵入並按Enter鍵後,我試圖運行的JavaScript沒有觸發

enter image description here

但刷新瀏覽器或重新插入後字現在它工作。它目前顯示註冊部分。

enter image description here

我怎樣才能確保代碼window.location.href.indexOf將在第一次嘗試或不再次刷新瀏覽器。該網站建立在一個角度框架上

+1

你怎麼插入而無需刷新頁面。當然你需要刷新它。 – dfsq

+0

你使用的JavaScript框架或路由器,把'#/'在URL? – charlietfl

+0

是的,它運行在一個角框架上 – clestcruz

回答

0

它不起作用,因爲您的腳本(例如:main.js)僅在執行頁面加載時執行一次

您可能想要使用window.history來操作瀏覽器歷史記錄。你可以用pushState()

History API

希望它可以幫助更新的查詢字符串。

+0

你的意思是我的腳本只執行一次? – clestcruz

+0

它應該工作,因爲它在頁面加載時執行,所以不需要刷新,這個答案沒有被正確解釋 –

+0

我的意思是你的代碼只運行一次,當頁面加載時。 –

2

如果您只更改#標誌後的URL ,則頁面將不會重新加載,因爲您只更改URL的錨點部分。
包裝在$(document).ready(function() { ...中的代碼只會在加載頁面時運行一次。

你想要做的是增加一個監聽路由變化事件,並在處理程序運行你的代碼,這樣的事情:

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

所以我只需要將它移到'$(document).ready(function(){...'? – clestcruz

+0

@clestcruz之外),那麼它只會在頁面加載之前運行一次。做的是在Angular中添加一個監聽器來更改路由,並在處理器中運行你的代碼 –

+0

讓我試試吧,我不是很熟悉angular,因爲項目剛剛交給我 – clestcruz