programing

jQuery.ready에 정의된 함수를 전 세계에서 사용할 수 있도록 하려면 어떻게 해야 합니까?

oldcodes 2023. 11. 5. 14:58
반응형

jQuery.ready에 정의된 함수를 전 세계에서 사용할 수 있도록 하려면 어떻게 해야 합니까?

유튜브 아이디를 url에서 떼어내는 기능이 있습니다.그러면 이 기능을 (워드 프레스 루프에서) 페이지당 10회 사용하고 싶습니다.

함수 스크립트 태그 내에서 URL을 입력하면 함수가 잘 작동하지만 루프 내에서 새 스크립트 태그 집합을 시작하면 작동하지 않습니다.

나는 먼저 내 기능을 다 선언하지 않고 어떻게 사용할 수 있는지 알아야 합니다.

머리말에 있는 코드는 이렇습니다.

 <script type="text/javascript"> 
$(document).ready(function() {
var getList = function(url, gkey){
        var returned = null;
        if (url.indexOf("?") != -1){
          var list = url.split("?")[1].split("&"),
                  gets = [];

          for (var ind in list){
            var kv = list[ind].split("=");
            if (kv.length>0)
                gets[kv[0]] = kv[1];
        }

        returned = gets;

        if (typeof gkey != "undefined")
            if (typeof gets[gkey] != "undefined")
                returned = gets[gkey];

        }

            return returned;

    };


        // THIS WORKS

    alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v"));


      });

하지만 페이지의 다른 곳에서 사용하려고 하면 작동이 되지 않습니다.

 <script type="text/javascript"> 

      $(document).ready(function() {
              alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v"));
      };
      </script>

파이어버그는 getList가 정의되어 있지 않기 때문에 이해가 되지 않습니다.이 기능을 '전 세계적으로' 선언할 수 있습니까?

두 가지 옵션을 선택할 수 있습니다.window전역으로 만드는 개체:

window.getList = function(url, gkey){ 
    // etc...
}

또는 문서 준비 이벤트 핸들러 내부에서 전역 범위로 이동합니다.

$(document).ready(function() {  
    alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v"));
});  
var getList = function(url, gkey){  

    var returned = null;  
    if (url.indexOf("?") != -1){  
      var list = url.split("?")[1].split("&"),  
              gets = [];  

      for (var ind in list){  
        var kv = list[ind].split("=");  
        if (kv.length>0)  
            gets[kv[0]] = kv[1];  
    }  

    returned = gets;  

    if (typeof gkey != "undefined")  
        if (typeof gets[gkey] != "undefined")  
            returned = gets[gkey];  

    }  

        return returned;  

};  

사용에 대한 이 질문을 읽어 보는 것도 있습니다.var functionName = function () {}function functionName() {}, 그리고 가변 범위에 관한 이 기사.

그러나 또 다른 옵션은 jQuery 객체 자체에 함수를 거는 것입니다.이렇게 하면 글로벌 네임스페이스가 더 이상 오염되지 않도록 할 수 있습니다.

jQuery.getlist = function getlist(url, gkey) {
  // ...
}

그러면 "$getlist(url, key)"를 통해 얻을 수 있습니다.

getList()를 ready() 함수 밖에 선언합니다.

var getList = function(url, gkey){
        var returned = null;
        if (url.indexOf("?") != 
....
....
...
};

이제 getList는 코드의 어느 곳에서나 작동합니다.

$(document).ready( function() {
alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v"));
});

문제는 getList(.) 함수의 범위였습니다.

당신은 단순히 당신의 기능을 에 추가할 수 있습니다.$.fn변수:

(function ($) {

   $.fn.getList = function() {
       // ...
   };

}(jQuery));

사용 예시:

$().getList();

이것은 일반적으로 jQuery용 기본 플러그인을 생성할 때 수행하는 작업입니다.

스크립트 맨 위에 정규 함수로 정의하면 됩니다.

<script type="text/javascript">
    function getlist(url, gkey){  
        ...
    }
</script>

글로벌 함수로 선언하려면 jQuery 특정 비트를 모두 제거하면 됩니다.이와 같은 것:

function getList(url, gkey) {
    var returned = null;
    if (url.indexOf("?") != -1){
    var list = url.split("?")[1].split("&"), gets = [];
    for (var ind in list){
        var kv = list[ind].split("=");
        if (kv.length>0) {
            gets[kv[0]] = kv[1];
        }
    }

    returned = gets;

    if (typeof gkey != "undefined") {
        if (typeof gets[gkey] != "undefined") {
            returned = gets[gkey];
        }
    }

    return returned;
}

그러면 어디서든 전화할 수 있을 겁니다.

언급URL : https://stackoverflow.com/questions/2223305/how-can-i-make-a-function-defined-in-jquery-ready-available-globally

반응형