【问题标题】:Call from js a class from different current file从js调用来自不同当前文件的类
【发布时间】:2015-12-10 03:59:38
【问题描述】:

标题很奇怪,但我会尽可能地说明情况。

我有一个带有导航栏的网站,每个选项卡都是不同的 php 文件。对于所有文件,我有一个通用的 js 和 css 文件。目录树是:

-tab1.php
-tab2.php
-/js/functions.js

当我在 tab2 并尝试从 tab1 获取课程时,问题就来了。 “this_row”类仅在 tab1 中,如果我在 tab2 中,则值不会得到。如果我在 tab2 中用这个类绘制一个 div 一切正常。

function showSensorNames(){ 

    $('.this_row').each(function(){
        saveNames.push($(this).find('.btn_view').text());
    });
}

并且这个函数是从$(document).ready(function(){调用的

我不知道是否有任何方法可以做到这一点,也许是通过所有文件执行全局函数,或者我为每个选项卡创建不同文件的方法是否错误。我也考虑过保存到 cookie 或会话中,但我认为这不是最合适的方式。

更新: 有没有办法让标签不是不同的文件?有什么好的教程可以做到这一点吗?然后会被认出来

【问题讨论】:

  • 我不清楚您是否正在离开当前页面。如果您在用户单击链接时加载了一个全新的页面,那么在 JavaScript 中就无法拥有持久的全局状态。为此,您需要使用 AJAX 使用不同的页面加载模式。根据您尝试在页面之间保留的数据,您可以使用 GET、POST、cookie 甚至 localStorage API。
  • 在同一个目录(服务器)中有两个页面,从导航栏调用。第一个文件有我试图从第二个文件调用的类,但它们都共享相同的 js。
  • 好吧,即使它们共享同一个 JavaScript 文件,每次您加载新页面时,您基本上都是从头开始运行代码,没有持久状态。
  • 当然不行。正如您所说,tab2 页面上没有任何课程.this_row,因此您无法访问它的内容。如果您尝试从 tab1 获取信息,那么 tab2 可能不应该是不同的选项卡。您应该更好地解释您要阅读的信息。
  • 我试图在第一个选项卡中获取一些 div 的名称,然后在第二个选项卡中再次显示它。所以这不能做,不是吗?有没有办法做到这一点,或者不同的选项卡不是不同的文件的方式......

标签: javascript php jquery


【解决方案1】:

由于您对每个选项卡都使用 PHP 文档,因此每次单击导航中的链接时,您实际上是在重新加载页面(或新页面)。 JS 会转储您在重新加载时创建和存储的任何 var 或对象。如果您希望能够将 JS 数据传递到新页面 - 可以选择使用 HTML5 LocalStorage 存储 var。

// Store
localStorage.setItem("color", "blue");
// Retrieve
var retrievable = localStorage.getItem("color");

如果您只想在该会话期间存储数据,也可以使用 sessionStorage。

【讨论】:

  • 有什么办法可以避免为每个选项卡使用一个文档吗?也许是一个很好的教程?
  • 查看 MV* Javascript 框架,如 AngularJS 或 Ember,它们是为单页 Web 应用程序设计的。
【解决方案2】:

如果你必须使用 2 个文件并且你必须在它们之间共享数据,你可以使用 sessionStorage。

当你设置时

sessionStorage.setItem('key','value');

当你得到

sessionStorage.getItem('key');

注意:关闭浏览器时数据会被清除。

【讨论】:

    猜你喜欢
    • 2013-12-30
    • 2023-01-23
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    相关资源
    最近更新 更多