2017-05-09 111 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