Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在jQuery中存储全局值(不一定是全局变量)?_Javascript_Jquery_Global Variables - Fatal编程技术网

Javascript 如何在jQuery中存储全局值(不一定是全局变量)?

Javascript 如何在jQuery中存储全局值(不一定是全局变量)?,javascript,jquery,global-variables,Javascript,Jquery,Global Variables,目前,我正在开发一个使用大量JavaScript、jQuery、Microsoft客户端JavaScript和其他库的遗留网页。底线-我不能从头重写整个页面,因为业务无法证明这一点。所以事实就是这样。无论如何,我需要用一个变量污染全局名称空间(我真的不太尝试)。有三种选择我一直在考虑- 只需使用普通JavaScript声明存储/检索它-var x=0 使用jQuery存储/检索DOM标记中的值-$(“body”).data(“x”,0) 使用隐藏的表单字段,并使用jQuery设置/检索值-$(“

目前,我正在开发一个使用大量JavaScript、jQuery、Microsoft客户端JavaScript和其他库的遗留网页。底线-我不能从头重写整个页面,因为业务无法证明这一点。所以事实就是这样。无论如何,我需要用一个变量污染全局名称空间(我真的不太尝试)。有三种选择我一直在考虑-

  • 只需使用普通JavaScript声明存储/检索它-
    var x=0

  • 使用jQuery存储/检索DOM标记中的值-
    $(“body”).data(“x”,0)

  • 使用隐藏的表单字段,并使用jQuery设置/检索值-
    $(“whatever”).data(“x”,0)


  • 有更好的办法吗?我查看了现有的一堆代码,我不相信变量可以在函数中确定作用域。

    您可以在jQuery对象中创建名称空间,如下所示:

    $.mynamespace = { 
        myVar : "something", 
        myVar2 : "somethingElse" 
    }; 
    
    或:


    请记住,任何名为“mynamespace”的插件方法都将被覆盖,因此请确保使用合理的名称。

    您可以在全局范围内创建哈希并将其用作命名空间:

    MyNamepace={}
    MyNamespace.newvar = 'value'
    // MyNamespace.newvar => 'value'
    

    与您分享我的实践,我会在所需的JavaScript文件中创建一个带有合理前缀的全局对象/var,就像我正在处理一个页面,其中该对象将是一个文本框,然后我会将其命名为:

    g_TxtMyValue = 'value';    // g_ specifies it to be a global variable, it is one
                               // of the many conventions used
    
    如果有多个全局变量,还可以有一个命名空间,例如:

    my_txt = {};  // For a real site I would use a prefix relative to the project
                  // name instead of "my".
    
    my_txt.testValueOne = 'Value one';
    my_txt.testValueOne = 'Value two';
    
    这些变量在初始化后将在整个网站上为您提供


    我希望这能有所帮助。

    对我来说,处理这种情况的最佳方法是在窗口对象中定义一个对象:

    window.my_config =
    {
        my_var1 : 1,
        my_var1 : 2,
        my_var1 : 3
    };
    
    这将使您的范围保持整洁。无论何时使用
    窗口访问全局。my_config
    任何查看代码的人都会知道正在访问全局。

    请稍等片刻:

    fancybox是否在执行AJAX(意思是:如果它在iFrame中加载,则应向close方法添加“父级”),如下所示:

    parent.$.fancybox.close();
    
    使用下划线


    .isEmpty(“”)
    将返回
    true

    为什么名称空间变量应声明为jQuery的属性@佩德罗-不需要。我只是指出这是一种可能性。如果我想使用它,我应该在哪里申报?我所有的javascript代码都在一个JS文件中。我不想将JavaScript代码与HTML代码混合在一起。这是一个愚蠢的解决方案,它很容易在声明的名称空间与jQuery对象的变量和方法之间发生名称冲突。我不理解这个解决方案的价值。对我来说,这不好。我可以在所有iframe表单父级中使用此全局变量?这是一个愚蠢的解决方案,它容易在声明的名称空间和其他全局变量和方法之间发生名称冲突。我不理解这个解决方案的价值。对我来说,这太糟糕了。您可以控制全局范围中存在哪些名称,但无法控制更新时可能添加到jQuery中的方法和变量名。这是名称空间在许多语言中显式存在的一个重要原因。如果没有,名称开始变得奇怪(即:Smalltalk系统类名),但并不总是如此。没有什么能阻止某个流氓库重写您的哈希。本质上,如果没有显式的名称空间,就无法避免这个问题。这就是为什么jQuery模块编写文档建议在jQuery对象中使用单个散列来进行名称空间,因为jQuery名称空间实际上仅限于流行插件。这比使用jQuery名称空间更有意义。有没有任何理由认为这种方法不能很好或更好地发挥作用?
    window.my_config =
    {
        my_var1 : 1,
        my_var1 : 2,
        my_var1 : 3
    };