Ich habe eine Funktion, die die YouTube-ID von einer URL entfernt. Ich möchte diese Funktion dann 10 Mal pro Seite (in der WordPress-Schleife) verwenden.
Die Funktion funktioniert hervorragend, wenn ich die URL in meine Funktionsskript-Tags einfüge, aber wenn ich einen neuen Satz von Skript-Tags in der Schleife starte, funktioniert sie nicht.
Ich muss wissen, wie ich meine Funktion verwenden kann, ohne vorher alles zu deklarieren.
Das ist also der Code, den ich in der Kopfzeile habe:
<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"));
});
Aber wenn ich versuche, dies irgendwo anders auf der Seite zu verwenden, funktioniert es nicht.
<script type="text/javascript">
$(document).ready(function() {
alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v"));
};
</script>
Firebug gibt mir getList ist nicht definiert , was Sinn macht, weil es nicht ist. Kann ich diese Funktion "global" deklarieren?
javascript
jquery
wesbos
quelle
quelle
Antworten:
Sie haben zwei Möglichkeiten: Fügen Sie es dem
window
Objekt hinzu, um es global zu machen:window.getList = function(url, gkey){ // etc... }
oder verschieben Sie es aus dem dokumentenbereiten Ereignishandler in den globalen Bereich:
$(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; };
Vielleicht möchten Sie auch diese Frage zur Verwendung von
var functionName = function () {}
vsfunction functionName() {}
und diesen Artikel zum variablen Bereich lesen .quelle
Eine weitere Option besteht darin, die Funktion vom jQuery-Objekt selbst abzuhängen. Auf diese Weise vermeiden Sie, den globalen Namensraum weiter zu verschmutzen:
jQuery.getlist = function getlist(url, gkey) { // ... }
Dann können Sie mit "$ .getlist (URL, Schlüssel)" darauf zugreifen.
quelle
deklarieren Sie getList () außerhalb der ready () - Funktion.
var getList = function(url, gkey){ var returned = null; if (url.indexOf("?") != .... .... ... };
Jetzt funktioniert die getList an einer beliebigen Stelle im Code:
$(document).ready( function() { alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v")); });
Das Problem war der Umfang der Funktion getList (.).
quelle
Definieren Sie es einfach als reguläre Funktion oben in Ihrem Skript:
<script type="text/javascript"> function getlist(url, gkey){ ... } </script>
quelle
Sie können Ihre Funktion einfach in die
$.fn
Variable einfügen:(function ($) { $.fn.getList = function() { // ... }; }(jQuery));
Anwendungsbeispiel:
Dies tun Sie normalerweise beim Erstellen eines Basis-Plugins für jQuery.
quelle
Um es als globale Funktion zu deklarieren, entfernen Sie einfach alle jQuery-spezifischen Bits. Etwas wie das:
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; }
Und dann sollten Sie es von überall aus anrufen können.
quelle