2016-08-29 58 views
0

情景 Web应用程序的工作流程是这样的:为什么当请求来自页面外部时,window.load不工作,但否则它会影响?

  1. 有人点击一个a href元素到页面中。 http://example.org/
  2. 按照链接,然后到达站点内的另一个页面。 http://example.org/page-2/
  3. 链接URL还包含一个哈希变量。

(此散列变种是我故意的,以便使用来实现下一个点)

  • 有一个内容网格,必须表现出想要的部分,这个对象是用一个开箱即用的CMS构建的,所以我最好不要修改它。这也只在用户点击按钮过滤器时才起作用。
  • (此过滤器完全基于事件而不是“GUI可见”的位置,因此我不能呼吁从一URL的特定的过滤器,以前的对象-there是个以前的对象,是 - 工作真的好与URL哈希值,但新的没有。)

  • 内容格栅过滤元件没有任何标识,他们只是有一个数据自定义属性被识别。
  • 就是这样。

    的变通办法旨在是这样的:

    $(window).load(function() { 
         var filter = window.location.hash.substr(1); 
         if(filter == "keywordA") { 
         $('a[data-filter=".cat-1"]').trigger('click'); 
         } 
         if(filter == "keywordB"){ 
         $('a[data-filter=".cat-2"]').trigger('click'); 
         } 
         if(filter == "keywordC"){ 
         $('a[data-filter=".cat-3"]').trigger('click'); 
         } 
         if(filter == "keywordD"){ 
         $('a[data-filter=".cat-4"]').trigger('click'); 
         } 
         if(filter == "keywordE"){ 
         $('a[data-filter=".cat-5"]').trigger('click'); 
         } 
        }); 
    

    然后,黑暗和未知的力量进入的地方,因为当我在地址栏输入:http://example.org/page-2/#keywordD的DOM效果很好,符合市场预期。内容网格正好显示我想要的内容。

    但是,当我尝试内http://example.org/达到相同的链接,但来自a href元素它只是没有在所有做任何事情。

    进一步解释

    我用window.load因为一旦一切都在DOM定居,并$(document).ready()功能的每一个代码实例后,要执行这样的功能是被迫的,因为该网站已经有很多作品这些。

    +0

    页面上的哪个位置是脚本?任何控制台错误? –

    +0

    这是怎么工作的,'filter'没有被声明 –

    +0

    就在''标签之前,根本没有控制台错误。 过滤器现在声明(在问题上)。 – Luis

    回答

    1

    答案

    不知何故我被触发处理程序之前该事件被附接,尽管window.load事件被推测用于触发功能当所有的DOM是完全加载。

    https://stackoverflow.com/a/2060275/1126953

    荣誉给诺亚。

    基于以前的答案我可以想办法设置所需的行为,因为它遵循:

    $(window).load(function() { 
        setTimeout(function() { 
         var filter = window.location.hash.substr(1); 
         if(filter == "keywordA") { 
         $('a[data-filter=".cat-1"]').trigger('click'); 
         } 
         if(filter == "keywordB"){ 
         $('a[data-filter=".cat-2"]').trigger('click'); 
         } 
         if(filter == "keywordC"){ 
         $('a[data-filter=".cat-3"]').trigger('click'); 
         } 
         if(filter == "keywordD"){ 
         $('a[data-filter=".cat-4"]').trigger('click'); 
         } 
         if(filter == "keywordE"){ 
         $('a[data-filter=".cat-5"]').trigger('click'); 
         } 
        },10); 
        }); 
    

    只是一个简单的延迟。

    非常感谢您的时间斯蒂芬。

    +1

    很高兴你能解决它:) –

    1

    这里的问题: 当从一个链接http://example.org/page-2/#到不同的链接是相同的页面,但有一个不同的哈希变种,像http://example.org/page-2/#keywordD浏览,该网站实际上并不重装。这是默认行为,因为它意味着使用哈希的ID跳转到页面上的元素。

    幸运的是,网站上有一个哈希变化事件。

    'onhashchange' 
    

    现在取决于如何将筛选的作品,你可能想打电话,做所有的过滤,或者,如果这是一个服务器端的CMS的事情(即做它的页面加载一个)的功能,您可能需要重新加载页面。

    $(window).bind('hashchange', function(e) { 
        // Enter your filter function here 
        doFiltering(); 
    }); 
    

    或者如果重新加载页面更合适。

    $(window).bind('hashchange', function(e) { 
        document.location.reload(); 
    }); 
    

    我不太明白你所说的“这个过滤器是完全基于事件而不是‘GUI可见的’位置”,意味着什么,所以你可能要阐述多一点的评论,如果我误解了你,但我希望这些soloutions其中一个为你工作。

    +1

    该短语指的是对象行为,过滤器与数据过滤器自定义属性一起使用,而不具有明显的用户值,例如散列更改,我试图找到另一种方式。 另外,导航问题不在http://example.org/page-2/里面,我甚至不需要哈希,坏的是当有人点击http://example.org/到访问http://example.org/page-2/#keywordD,而javascript/jQuery函数不起作用。 非常感谢您的时间。 – Luis

    +1

    我对此表示赞成,因为它可能对别人有用,很好解释。 – Luis

    相关问题