jQuery에서 전역 값 (반드시 전역 변수 일 필요는 없음)을 저장하는 방법은 무엇입니까?


80

현재 저는 수많은 JavaScript, jQuery, Microsoft 클라이언트 JavaScript 및 기타 라이브러리를 사용하는 레거시 웹 페이지에서 작업하고 있습니다. 결론-비즈니스가 정당화 할 수 없기 때문에 전체 페이지를 처음부터 다시 작성할 수 없습니다. 그래서 ... 그게 바로 그 거예요. 어쨌든, 변수로 전역 네임 스페이스를 오염시켜야합니다. 제가 생각했던 세 가지 옵션이 있습니다.

  1. 일반 JavaScript 선언을 사용하여 저장 / 검색하십시오. var x = 0;

  2. jQuery를 사용하여 DOM 태그에 값을 저장 / 검색- $("body").data("x", 0);

  3. 숨겨진 양식 필드를 사용하고 jQuery로 값을 설정 / 검색합니다. $("whatever").data("x", 0);

더 좋은 방법이 있습니까? 나는 기존의 코드 더미를 보았고 변수가 함수에서 범위가 지정 될 수 있다고 생각하지 않습니다.

답변:


100

다음과 같이 jQuery 객체 내에 네임 스페이스를 만들 수 있습니다.

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

또는:

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

'mynamespace'라는 이름의 플러그인 메서드는 덮어 쓰여 지므로 적절한 이름을 사용하십시오.


1
네임 스페이스 변수를 jQuery의 속성으로 선언해야하는 이유는 무엇입니까?!
Pedro Rolo

5
@Pedro-그럴 필요가 없습니다. 나는 이것을 하나의 가능성으로 지적했습니다.
karim79

이것을 사용하려면 어디에 선언해야합니까? 내 모든 자바 스크립트 코드는 JS 파일에 있습니다. JavaScript 코드와 HTML 코드를 혼합하고 싶지 않습니다.
VansFannel

이것은 선언 된 네임 스페이스와 jQuery 개체의 변수 및 메서드간에 이름 충돌이 발생하기 쉬운 어리석은 솔루션입니다. 이 솔루션의 가치를 이해하지 못합니다. 저에게는 좋지 않습니다.
Pedro Rolo 2011 년

이 전역 변수를 모든 iframe 양식 부모에서 사용할 수 있습니까?
Thulasiram

39

나에게이 상황을 처리하는 가장 좋은 방법은 창 개체에 개체를 정의하는 것입니다.

window.my_config =
{
    my_var1 : 1,
    my_var1 : 2,
    my_var1 : 3
};

이렇게하면 스코프가 깔끔하고 깨끗하게 유지됩니다. 그리고 window.my_config코드를 보는 사람을 사용하여 전역에 액세스 할 때마다 전역이 액세스되고 있음을 알 수 있습니다.


4
이것은 jquery 네임 스페이스를 사용하는 것보다 나에게 더 의미가 있습니다. 이 방법이 잘 작동하지 않는 이유가 있습니까?
Damon 2011

6

전역 범위에 해시를 만들고 네임 스페이스로 사용할 수 있습니다.

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

이것은 선언 된 네임 스페이스와 다른 전역 변수 및 메서드간에 이름 충돌이 발생하기 쉬운 어리석은 솔루션입니다. 이 솔루션의 가치를 이해하지 못합니다. 나에게는 짜증나.
tad

1
전역 범위에있는 이름은 제어 할 수 있지만 업데이트시 jQuery에 추가 될 수있는 메서드와 변수 이름은 제어 할 수 없습니다. 이것은 네임 스페이스가 여러 언어로 명시 적으로 존재하는 강력한 이유 중 하나입니다. (스몰 토크 - 시스템의 클래스 이름 예) 그렇지 않은 경우, 이름은 이상한 일을 시작
페드로 롤로

4
항상 그런 것은 아닙니다. 일부 불량 라이브러리가 해시를 재정의하는 것을 막을 수는 없습니다. 본질적 으로 명시적인 네임 스페이스 없이는 문제 피할 수 없습니다 . 이것이 jQuery 모듈 저작 문서가 네임 스페이스 목적으로 jQuery 객체에 단일 해시를 권장하는 이유입니다. jQuery 네임 스페이스는 사실상 인기있는 플러그인으로 제한 되기 때문 입니다.
tad

2

내 연습을 여러분과 공유하기 만하면이 개체가 텍스트 상자가 될 페이지에서 작업하는 것처럼 필요한 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';

이러한 변수는 초기화 된 후 웹 사이트 전체에서 사용할 수 있습니다.

이게 도움이 되길 바란다.



0

짧은 알림 :

fancybox가 AJAX를 수행하고 있습니까 (즉, iFrame 내에서로드되면 close 메소드에 "parent"를 추가해야 함). 다음과 같이 :

parent.$.fancybox.close();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.