Ich versuche, ein Modul zu machen ScrollToAnchor
genannt, die eine Funktion goToTarget
, dass ich in der Lage zu nennen wie ScrollToAnchor.goToTarget(target);
Javascript-Modul mit JQuery Modulfunktionen zu undefinierten werden
aber sie sagt, dass
genannt hatScrollToAnchor.goToTarget is not a function
Ich denke, ScrollToAnchor
ist vom Typ jQuery, wie ich es wegen der $
habe. Hier ist der Code:
var ScrollToAnchor = $(function() {
var headerHeight = 70;
$('a[href*="#"]:not([href="#"])').click(function() {
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
if (goToTarget(this.hash))
return false;
}
});
/*$('input[data-target]').click(function() {
if (gotoTarget($(this).data("target")))
return false;
})*/
var goToTarget = function(targetName) {
var target = $(targetName);
target = target.length ? target : $('[name="' + targetName.slice(1) + '"]');
if (target.length) {
$('html,body').animate({
scrollTop: target.offset().top - headerHeight
}, 1000);
return true;
}
return false;
}
return {
goToTarget: goToTarget
}
});
Was mache ich falsch? Wenn ich die $
von var ScrollToAnchor = $(function() {
entferne, funktioniert die jQuery innerhalb ScrollToAnchor
nicht.
Aber wenn ich die $
dort lassen dann denkt, ScrollToAnchor
ist Typ jQuery und ScrollToAnchor.goToTarget
ist keine Funktion.
Danke. Wie würde ich 'ScrollToAnchor.goToTarget (Ziel)' in einer anderen Javascript-Datei nennen? Gibt es eine Art Import-Aussage? Weil ich bekomme 'bootstrap_app.js: 28 Uncaught ReferenceError: ScrollToAnchor ist nicht definiert' – BeniaminoBaggins
Da Sie' ScrollToAnchor' in den Geltungsbereich des jQuery DOM-ready-Callbacks setzen würde, wird der globale Gültigkeitsbereich verlassen. Eine Option wäre, "var ScrollToAnchor" durch "window.ScrollToAnchor" zu ersetzen. Dies würde ScrollToAnchor in den globalen Bereich stellen und an anderer Stelle verfügbar machen.Dies könnte jedoch zu einer Race-Bedingung führen, wenn die andere JS-Datei versucht, 'ScrollToAnchor' aufzurufen, bevor die jQuery DOM-ready-Funktion ausgeführt wird. Ich werde meine Antwort aktualisieren, um dies zu vermeiden. – jmealy
Danke. Eine gute Erklärung. – BeniaminoBaggins