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
'programing' 카테고리의 다른 글
AJAX를 사용하여 SQL 데이터베이스의 변경 사항 확인 (0) | 2023.11.05 |
---|---|
WordPress - 메타 값이 존재하는 경우 메타 값에 따라 순서를 지정하고, 존재하지 않는 경우 날짜를 지정합니다. (0) | 2023.11.05 |
Visual Studio 2013 ADO.net 엔티티 모델에 Oracle 데이터 소스가 없습니다. (0) | 2023.11.05 |
Angular.js:기존 스코프 데이터를 기반으로 ng-re-relending이 가능합니까? (0) | 2023.11.05 |
테이블 행에 ng-반복 사용 (0) | 2023.11.05 |