13

Is it possible to pass a variable to a linked .js file? I tried this:

<sf:JsFileLink ID="JQueryLoader" runat="server" ScriptType="Custom" FileName="~/Files/Scripts/rotatorLoader.js?timeout=1000" /> 

But firebug is telling me that timeout is not defined. Here is the code for that .js file:

$(document).ready(function() { $("#rotator > ul").tabs({ fx: { opacity: "toggle"} }).tabs("rotate", timeout, true); }); 

I am using <sf:JsFileLink ... /> tag is because the website I am working in utilizes sitefinity and this tag allows me to load external .js files.

UPDATE:

I was able to 'trick' the include by creating an aspx page that emulates a javascript page:

<%@ Page Language="C#" %> <% Response.ContentType = "text/javascript"; Response.Clear(); string timeout; try { timeout = Session["timeout"].ToString(); } catch { timeout = "4000"; } %> $(document).ready(function() { $("#rotator > ul").tabs({ fx: { opacity: "toggle"} }).tabs("rotate", <%=timeout %>, true); }); 

And on the user control page:

[DefaultProperty("BannerTimeout")] public partial class Custom_UserControls_TabbedRotator : System.Web.UI.UserControl { [Category("Configuration")] [Description("Sets the rotation timeout, in seconds.")] [DisplayName("Banner Timeout")] public int BannerTimeout { get; set; } protected void Page_Load(object sender, EventArgs e) { Session.Add("timeout", (BannerTimeout*1000)); } } 

This achieved what I was looking for, and maybe this method can help someone else out.

4 Answers 4

20

try this:

<script> var myvariable = "foo"; </script> <script src="/link/to/js.js"></script> 
Sign up to request clarification or add additional context in comments.

4 Comments

I know this is old, but this seems to exactly answer the op's question, and very elegantly. Thanks so much!! I may be misunderstanding what the op asked because I'm not good at javascript, but this allowed me to pass variables from my view page so my external js file had access to the variables. Unless there's something I'm missing in the op's question, the marked answer is wrong. I guess this is almost the same as @Developer-Sid
@Alan How is Greg's answer wrong? He basically gave the exact same solution: use var in an embedded <script> tag, before the external script loads.
Kenny83 This was a long time ago! I applied this answer's code block, and it worked great. I think I made the comment above because the marked answer's code block only showed the var in the embedded <script> tag and you had to be sure to read the post's text line just before the code block to construct the final solution. @Kenny83, you are absolutely correct! I guess I just like to see the entire solution clearly annotated in an answer's code block, that's all.
@Alan Fair enough, and apologies for being the late newcomer to the party lol ;-)
17

No, you can't pass parameters like that and have the script read them in.

Technically you could grab them from the <script> tag, but that would be a real mess.

Could you just output a script block before you include the file?

<script type="text/javascript"> var timeout = 1000; </script> 

4 Comments

Doesn't look like it, at least not in this file. I am going to try putting that in the master page file.
This works if I have the script block in the master page, but not in the user control file.
Actually, you can pass parameters like that and have the script read them in: stackoverflow.com/questions/1203933/…
@crescentfresh that's grabbing the url from the <script> tag as I noted
4
<script type="text/javascript"> var imagesPath = "emblematiq/img/"; </script> <script type="text/javascript" src="emblematiq/niceforms.js"></script> 

This will work fine on server

Comments

0

No, but you can pass a the value directly to a function in that file or set a variable value that will be used in the external file.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.