2016-03-29 9 views
0

Ich habe gesehen, wie einige Leute Teile dieser Frage zu stellen und versuchte die verschiedenen Lösungen, aber nichts scheint zu funktionieren. Ich bin mir nicht sicher, ob es die Kombination oder etwas anderes in meinem Projekt ist, das verursacht, dass es nicht funktioniert.Pass Parameter zu .js Datei auf Dokument bereit

In meinem Projekt habe ich verschiedene Seiten, die ähnliche DataTables anzeigen. Ich möchte die Initialisierung dieser Tabellen in eine Datei schreiben, um Duplikate zu sparen. Aber ich würde gerne Parameter eingeben, um die kleinen Unterschiede zwischen z.B. Spaltenüberschriften. Nur um es zu komplizieren, ist die Initialisierung auf document.ready nicht überraschend.

Dinge, die ich habe versucht:
Pass vars to JavaScript via the SRC attribute
http://feather.elektrum.org/book/src.html

Im folgenden Codebeispiel ich nie den zweiten Alarm schlagen. Was ich, wenn wollen sie die zweite und dritte Benachrichtigung zu treffen und für die Inhalte test_var korrekt sein:

(cs) html-Datei

<script> 
    $(document).ready(function() { 
     var test_var = "Hopefully this has worked"; 
     alert("Pre TestScript"); 
     $.getScript("TestScript.js"); // Tried different paths to the file here as well 
    }); 
</script> 

TestScript.js

alert("In the TestScript"); 
alert("Test variable is: " + test_var); 

Vielleicht gehe ich alles falsch und es gibt eine andere/einfachere Möglichkeit, die Übergabe von Parametern an ein Skript (Datei) während document.ready

zu erreichen
+1

Ich denke, dass Sie Funktionen in der 'TestScript.js' definieren würden, und diese Funktionen aufrufen, um Parameter zu übergeben, wenn das Sinn macht? – Zack

+0

Wann wird die TestScript.js-Datei geladen? –

+0

https://api.jquery.com/jquery.getscript/ sagt das Skript wird abgerufen und ausgeführt, auf der globalen Kontext-Ebene, so ich vermute es nicht über die Variable test_var, die im Bereich innerhalb der $ definiert ist (Dokument) .ready (Funktion() {...}) '. – Zack

Antwort

0

Viele Menschen richtig beantwortet meine Frage, danke euch allen. Das Problem, das ich hatte, um es zum Laufen zu bringen, war, dass meine Skriptdatei, die ich versuchte, Parameter in zu übergeben, in meinem Ansichten/Gemeinsamen Ordner war, der wie beschrieben here blockiert wird.

Sobald ich mein Skript aus dem Views-Ordner verschoben hat, hat alles funktioniert. Und zusätzlich zu den obigen Antworten war das einfachste, das ich fand, this

1

Ein einfachste Weg, es zu tun würde (vorausgesetzt, dass Variablennamen test_var nicht eine globale Variable ist oder integrierte Eigenschaft/Methode bereits)

<script> 
    $(document).ready(function() { 
     var test_var = "Hopefully this has worked"; 
     alert("Pre TestScript"); 
     window.test_var = "Hopefully this has worked"; 
     $.getScript("TestScript.js"); // Tried different paths to the file here as well 
    }); 
</script> 

Above ich, dass test_var angenommen wird nur innerhalb document.ready definiert werden. Wenn es sich andernfalls um eine globale Variable handelt, kann auf sie ohne window zugegriffen werden.

Und in Ihrem TestScript.js, löschen Sie einfach die Variable, nachdem es

alert("In the TestScript"); 
alert("Test variable is: " + test_var); 
delete window.test_var; 
-1
$(document).ready(function() { 
    test_var = "Hopefully this has worked"; 
    $.getScript("TestScript.js"); // Tried different paths to the file here as well 
}); 
+0

Es ist nicht klar, was Sie hier zeigen möchten. Es sieht so aus, als ob Sie einen Teil der Frage als Antwort kopiert haben. – Zack

+0

Ich habe nur die Warnung und das Schlüsselwort var entfernt und den Code mit diesem aktualisiert und lassen Sie mich wissen –

+0

Das erklärt nicht, warum Sie denken, das würde funktionieren (Hinweis, es wird nicht). – Zack

0

Sie Leider Parameter in eine JS-Datei über die URL übergeben kann nicht als Antrag der Datei abzurufen verbraucht worden ist, nicht verfügbar in JS-Code.

Stattdessen können Sie Variablen deklarieren, bevor Sie die JS-Datei in der Seite enthalten, die dann darin, so etwas wie dieses zu lesen:

foo.html

<script> 
    var test_var = "Hopefully this has worked"; 
</script> 
<script src="testscript.js"></script> 

testscript.js

console.log(test_var); // = "Hopefully this has worked" 
+0

Versucht dies (fast) genau, d. H. Nicht über das Dokument bereit und es hat nicht funktioniert. –

0

Sie müssen Ihren Code in einer Funktion wickeln:

function testScript(test_var) { 
    alert("In the TestScript"); 
    alert("Test variable is: " + test_var); 
} 

Und dann können Sie es wie folgt verwendet werden:

<script> 
    $(document).ready(function() { 
     var test_var = "Hopefully this has worked"; 
     alert("Pre TestScript"); 
     $('<script>') 
      .attr('type', 'text/javascript') 
      .attr('href', 'TestScript.js') 
      .appendTo('head'); 
     testScript(test_var); 
    }); 
</script> 
0

Ich denke, das Ihr Problem lösen soll. Fügen Sie das TestScript hinzu.js in der HTML-Seite.

(cs) html-Datei

<script> 
    $(document).ready(function() { 
     var test_var = "Hopefully this has worked"; 
     alert("Pre TestScript"); 
     executeCommonScript(); 
    }); 
</script> 

TestScript.js

function executeCommonScript(){ 
    alert("In the TestScript"); 
    alert("Test variable is: " + test_var); 
} 
0

Zusätzlich zu den anderen Lösungen, die bisher vorgeschlagen wurden, ist eine andere Option zu setzen die Variablen, die Sie irgendwie in Ihrem HTML definiert haben, z als Daten-Attribute,

Da Sie mit jQuery ohnehin so etwas wie dies funktionieren würde:

$(document).ready(function() { 
 
    var test_var = $('.data-container').data('test-var'); 
 
    alert('Don\'t be alarmed: '+test_var); 
 
});
.data-container { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="data-container" data-test-var="This is just a test"></div>

Sie diese Daten-Attribute in einer beliebigen Datei zugreifen können Sie enthalten, so dass Sie würde sich nicht darum kümmern müssen, Variablen hin und her zu geben.

Natürlich ist diese Lösung am sinnvollsten ist, wenn Sie nicht nur ein div fügen Sie Ihre Variablen zu halten, aber fügen Sie Daten-Attribute auf jene Elemente, die tatsächlich durch die Variablen beeinflusst werden