JavaScript - Javascript Closure?
is this function a closure in javascript?
Code: function f1(){ var n=999; function f2(){ alert(n); // 999 } } is the function f2() a closure? if not? why? what's and use of a closure.could you depict it in your own words. thank you Similar TutorialsCode: function foo(x) { var tmp = 3; function bar(y) { alert(x + y + (++tmp)); } bar(10); } foo(2) is the function a closure? if not? why? thank you Hi, i'm looking to send a loop variable (i) to a function inside the loop, but I can't seem to get it to use the value I want, it keeps making it a reference of i and therefore the function is always called using the last value of i rather than the one it was set with. So if i have 5 Tabs then Tab 1, when clicked, should call DefaultTabClick(0) and so on rather than always using 4 for any of the tabs. Code: for (var i = 0; i < AccountSettings.Tabs.length; i++) { $tabs.append(CreateTabLink(AccountSettings.Tabs[i].Title, DefaultTabClick(i)));}); } function DefaultTabClick(i) { var i = i || AccountSettings.Tabs.length - 1; return function () { if (currentTab === i) {RenameTab(this);} else { SaveTabSettings(currentTab); //Save Current ClearDashboard(); //Clear Current LoadDashboardWithLayout(i); //Load Selected } } } When using anonymous wrappers (I guess they are called like that), what does "()" part do at the end of the stack? An example: Code: ( function() {} ) () //Here! What does it do and how can we use it? This is pretty cool; here's an online service Google has provided to scrunch your Javascript code down as small as possible. http://closure-compiler.appspot.com/home Here's the intro page... http://code.google.com/closure/compiler/ I like it! js code is as follows: Code: uniqueNo=(function(){ var no=0; return function(){ return no++; } })() document.writeln(uniqueNo()); // 1st time call document.writeln(uniqueNo()); // 2nd time call document.writeln(uniqueNo()); // 3rd time call the result is 1 2 3 why after the 2nd call, the declaration 'var no=0' is useless -- seems 'no' is updated and stored each time it is called? many thanks Hi all, I've got some simple code that I use to drag the corners of a DIV to resize it on the fly. One thing that bothers me is that there is a "global" variable just hanging outside and I would rather "encapsulate" it all into a block of code so that the variable persists, but is not visible outside of the code that uses it. So, here's the code: Code: /*** * support for mouse drag resize of mChat window * "global" save of mouse start position **/ var start = 0; /*** * do-nothing function to attach unused events to **/ function nullFunc () { return false; }; /*** * begin drag **/ function drag () { start = 0; document.onmouseup = up; document.onmousedown = nullFunc; document.onmousemove = move; return false; }; /*** * end drag **/ function up () { start = 0; document.onmouseup = nullFunc; document.onmousedown = nullFunc; document.onmousemove = nullFunc; return false; }; /*** * mouse move capture **/ function move (e) { var o = mouseXY(e); /* mouseXY not shown here */ if (start) { mChatSize(o.y - start); /* mChatSize not shown here */ } start = o.y; return false; }; You see the code captures the mouse Y coordinate and then subtracts "start" from it to generate a DELTA (which is what the mChatSize function needs). So, moving the mouse up generates "-1, -1, -1" maybe -2 if dragged fast and +1 +1 +1... if moved down.... you see? Now what I want to do is put all this code in a "box" so that "start" is global to the box, but invisible outside. I tried to do it and made no headway... I'm sure it's simple and I'm just missing it. Any help will be appreciated. Thanks! -- Roger I want to have another go at Javascript. I have several books on the subject but I find that my eyesight is a major problem. Therefore I want to try an on-line solution, preferably free. I have Googled, but there are so many that I am almost dizzy with the choices. Perhaps someone could recommend one. Not too fussy visually. My knowledge is VERY basic. Frank Hello! I am trying to find a script that allows you to open multiple browser tabs and then close each of those tabs, either one by one or all at once. Does anyone know how to do this please? Thanks so much for your help. Does anyone know how to make URL links that use Javascript still work when users have Javascript disabled on their browser? The only reason I'm using JS on a URL is because my link opens a PDF file, and I'm forcing it not to cache so users have the latest version. I tried the <script><noscript> tags, but I'm not sure if I'm using it correctly, as my URL completely disappears. Below is my HTML/Javascript code: <p class="download"> <script type="text/javascript">document.write("<span style=\"text-decoration: underline;\"><a href=\"javascript:void(0);\" onclick=\"window.open( 'http://www.webchild.com.au/mediakit/Direct_Media_Kit_Web.pdf?nocache='+ Math.floor( Math.random()*11 ) );\" >The Child Magazines Media Kit</a></span> (PDF 1 MB) ");</script> <noscript><span style="text-decoration: underline;"><a href="http://www.webchild.com.au/mediakit/Direct_Media_Kit_Web.pdf" >The Child Magazines Media Kit</a></span> (PDF 1 MB)</noscript> </p> Thanks for any help, Michael Hi, I have the following code snippet: test.html ====== <script language="javascript" type="text/javascript"> var testVariable = "test"; </script> <script language="javascript" type="text/javascript" src="test.js"> </script> test.js ===== var testVariable = window.top.testVariable; In firefox, I'm able to access testvariable defined within test.html in test.js. But in chrome, test.js couldnot get the window.top.testVariable field defined in test.html. Can any one please let me know how i can make it work in chrome?. Am i missing something here?. Hi Guys, I am new at JavaScript and start to do some tutorials.What I am trying to do here is prompting user to input a name and if the name was valid the page(document) will display with all objects like the button.But if user enter a wrong name then the button will be disabled! I create the following code but it did not work <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>New Web Project</title> <script language="JavaScript" type=""> function changeColor(){ document.bgColor = "Gray"; } </script> </head> <body> <script language="JavaScript" type="text/javascript"> var person = ""; person = prompt('What is Your Name:'); if (person == "Foo") { document.write("<h1 />Welcome " + person); document.bgColor = "Yellow"; } else { document.write("<h1 />Access Denied!!!!"); document.bgColor = "Red"; document.getElementById("gree").disabled = true; } </script> <div> <p/><input id="gree" type="button" value="Gray " onClick="changeColor();"> </div> </body> </html> as you can see I used the: document.getElementById("gree").disabled = true; but it did not work , could you please give an idea how I can solve this problem? Thanks I want to insert this js snippet Code: function addText(smiley) { document.getElementById('message').value += " " + smiley + " "; document.getElementById('message').focus(); return false; } to a loaded iframe with name&id chtifrm. I can access it & change embed something in its html via using something like: Code: $(parent.chtifrm.document.body).append('<div id=\"smly\" style=\"cursor:pointer;float:left;top:200px;display:none;position:absolute;\"><\/div>'); .... Code: parent.chtifrm.document.getElementById('chatbox_option_disco').style.display == 'none' but how do I insert js in the head of loaded iframe? Hi Guys I am trying to modify the functionality of my page. I want to be able to activate this piece of code using another javascript function. This is the code I want to activate: Code: <script type="text/javascript"><!-- $('#button-cart').bind('click', function() { $.ajax({ url: 'index.php?route=checkout/cart/update', type: 'post', data: $('.product-info input[type=\'text\'], .product-info input[type=\'hidden\'], .product-info input[type=\'radio\']:checked, .product-info input[type=\'checkbox\']:checked, .product-info select, .product-info textarea, .date_data input[type=\'text\']'), dataType: 'json', success: function(json) { $('.success, .warning, .attention, information, .error').remove(); if (json['error']) { if (json['error']['warning']) { $('#notification').html('<div class="warning" style="display: none;">' + json['error']['warning'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>'); $('.warning').fadeIn('slow'); } for (i in json['error']) { $('#option-' + i).after('<span class="error">' + json['error'][i] + '</span>'); } } if (json['success']) { $('#notification').html('<div class="success" style="display: none;">' + json['success'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>'); $('.success').fadeIn('slow'); $('#cart_total').html(json['total']); $('html, body').animate({ scrollTop: 0 }, 'slow'); } } }); }); //--></script> And this is how I want the format of the function to be: function testsession() { if there is a session called 'hiredate' { activate the script above } else { var el = document.getElementById("product_data"); } } I just dont know how to write this in javascript Could you help me if possible please I got an index.php Code: <html> <form action="bacakomik.php" method='post'> <select name="kodekomik"> <option value='../komik1/|23'>Judul Komik1</option> <option value="../komik2/|20">Judul Komik2</option> <option value="../komik3/|10">Juduk Komik3</option> <option value="../komik4/|20">Judul Komik4</option> </select> <input type="submit" /> </form> <?php echo ('<select>'); echo ('<option value= "'.$i.'">'.'Page '.$i.'</option>'); echo ('</select>'); ?> </html> As you can see, each of the option brings specific value "../komik1/|23" komik1 is a directory | is a delimiter 23 is the pages in one chapter and can be considered also as how many images are there on a specific directory This is my bacakomik.php Code: <?php $dirkomik = $_POST['kodekomik']; $exploded = explode("|", $dirkomik); echo ($exploded[0]); //picture directory echo ("<br>"); echo ($exploded[1]); //total page in the comic $pagecount = (int)$exploded[1]; //Take last posted value, process it right away echo ('<FORM name="guideform"> '); echo ('<select name="guidelinks">'); $i=1; do { echo ('<option value= "'.$i.'">'.'Page '.$i.'</option>'); $i= $i+1; }while($i <= $pagecount); //Printing option and select echo ("</select>"); ?> <input type="button" name="go" value="Go!" onClick="document.getElementById('im').src=document.guideform.guidelinks.options[document.guideform.guidelinks.selectedIndex].value+'.png';"> </FORM> <img src="img0.jpg" id="im"> With the current code on bacakomik.php, I only can change the img src of id "im" in the same directory only. What I want is that the Javascript could "add" the "$exploded[0]" variable so that the picture can be loaded from different directory. Anyone can do this? I believe that the fix should be somewhere on input tag inside OnClick, or do you know where? Anyway, I found this on the net http://p2p.wrox.com/php-faqs/11606-q...avascript.html Please help me to those who can... Hey, I've got to make the values of some textboxes change the co-ordinates of my sprite on a canvas and havent a clue on how to do it, Here is my form with the two textboxes and submit button: <form> x: <input type="text" name="x" /><br /> y: <input type="text" name:"y" /><br /> <input type="submit" value="Submit"/><br /> </form> And i need it so that they change the values of these: //this shows where my sprite will start on the canvas var block_x; var block_y; searched the internet for hours and cant really find anything i understand or works. any help is much appreciated All -- I have a JavaScript config file called gameSetting.js which contains a bunch of variables which configures a particular game. I also have a shared JavaScript library which uses the variables in gameSetting.js, which I include like so: <script type="text/javascript" src="gameSetting.js" ></script> <script type="text/javascript" src="gameLibrary.js" ></script> In gameSetting.js I have: $(document).ready(function() { // call some functions / classes in gameLibrary.js } in Firefox, Safari, and Chrome, this works fine. However, in IE, when it's parsing gameSetting.js, it complains that the functions that live in gameLibrary.js aren't defined. When it gets to parsing gameLibrary.js, the variables in gameSetting.js are reported as not being defined. I've tried dynamically bootstrapping the gameLibrary file using this function in document.ready for dynamic load... $.getScript("gameLibrary.js"); However, the same problem still happens in IE, where when it parses the files individually it's not taking into context the file/variables that came before, so it's not an out of load order problem. My options a 1) collapsing all the functions in gameLibrary.js and variables in gameSetting.js into one file. However, this is not practical because this is dealing with literally hundreds of games, and having a gameLibrary.js in ONE location for ONE update is what makes most logical sense. 2) figure out a way to get this to work where variables in file1 are accessible to file2 in IE (as it seems they are in other browsers). jQuery seems to be able to have multiple plugins that all refer to the based jQuery-1.3.2.js, so I know there is a way to get this to work. Help appreciated. Nero I wrote a log function that took note of various function calls. Thinking that functions are first class objects, and objects have properties, I made the name of each logged function a property of that function, e.g., brightenInnerPara.name = "brightenInnerPara"; Every browser I tried (Firefox, MSIE, Opera, Chrome, Safari) accepted the assignment, no problem. In Firefox and MSIE, the result was what I wanted: brightenInnerPara.name == "brightenInnerPara" But in the others, the result was: brightenInnerPara.name == null Question 1. Which Javascript is correct here? I favor Firefox and MSIE, not merely because they were willing to give me what I wanted, but also because it makes no sense to accept an assignment statement without throwing an error and then give it a null semantics, like Chrome, Opera, and Safari did. I found a workaround, using assignments like this: brightenInnerPara.prototype.name = "brightenInnerPara"; To my surprise, that worked in every browser. But I don't know why. It seems that such assignments are enough to cause each function to have its own distinct prototype. Question 2. Just how inefficient is my workaround, and why does it work? I am working on an assignment. I will be upfront about that. I am not looking for someone to write my code for me. I do have the algorithm laid out and I'm almost positive this algorithm will work. I am a computer science student who has programmed in everything from assembly type languages to C/C++, .NET, JAVA and others. I am well educated in the concepts of programming and good programming practices. Having said all that one thing that annoys me the most is when I know what I want my code to do but I have a hard time finding out how to get the required language to do that. Take all that and then throw it on to the big ole mess of now I need to write up an HTML form (easy) and have JavaScript "process" the form and using that make a table (graph really) to be inserted into the .innerHTML of the body in said web page. So I have my form coded and my logic worked out. There are two buttons at the bottom of this form entitled "submit" and "reset". Naturally the reset button puts the form fields back to their default values. However that is the only part of my assignment that works. My idea was to write a JavaScript function that would execute when the user clicked the "make table" button. The JavaScript function would assign all the form field values to variables and then it would proceed to make a table and fill it in based upon those values. The beginning and end of the table code would just be "inserted" into the table string but the middle parts would be generated by a loop and the variables I got from the form field values. After all this good stuff is done, JavaScript should insert this "HTML String" into the .innerHTML section of a <body> tag. Sounds like it should be simple, but I can't even get JavaScript to read the form field values into variables like it "should". I can use the document.FORMNAME.FORMFIELD.value method but I'm supposed to use the document.getElementByID() method to do it. So I want to pass the entire form to my "Make Table" function and then from there use the statement variable1 = document.getElementByID(fieldname).value for each fieldname and then I would have all my field "values". From there I would need to generate a table "string" which is html code to be inserted into the .innerHTML of the <body>.... getElementByID() is doing nothing for me right now. So I'm stuck there for the moment. Here is my code: [CODE] <html> <head> <script type="text/JavaScript"> var lbl1 = "fish" ; function MakeTable() { lbl1 = document.getElementByID('label1').value; alert(lbl1.value); } function printvar() { document.writeln(lbl1); } </script> </head> <body> <form name="myform"> <h1> Author:</h1> <!-- Start of first form line --> <input type="text" id="addcolor" /> <input type="button" value ="Add Color"> <br/> <!-- End of first form line --> <!-- Start of second form line --> Label 1: <input type="text" id='label1' value="USA"> <select id="colors"> <option value ="Black"> Choose One</option> <option value="Red">Red</option> <option value="Blue">Blue</option> <option value="Yellow">Yellow</option> <option value="Green">Green</option> <option value="Purple">Purple</option> </select> Value: <input type="radio" id="num" value ="1" /> 1 <input type="radio" id="num" value ="2" /> 2 <input type="radio" id="num" value ="3" /> 3 <input type="radio" id="num" value ="4" /> 4 <input type="radio" id="num" value ="5" /> 5 <br/> <!-- End of second form line --> <!-- Start of third form line --> Label 2: <input type="text" id="label2" value="England"> <select id="colors"> <option value ="Black"> Choose One</option> <option value="Red">Red</option> <option value="Blue">Blue</option> <option value="Yellow">Yellow</option> <option value="Green">Green</option> <option value="Purple">Purple</option> </select> Value: <input type="radio" id="num" value ="1" /> 1 <input type="radio" id="num" value ="2" /> 2 <input type="radio" id="num" value ="3" /> 3 <input type="radio" id="num" value ="4" /> 4 <input type="radio" id="num" value ="5" /> 5 <br/> <!-- End of third form line --> <!-- Start of forth form line --> Label 3: <input type="text" id="label3" value="South Korea"> <select id="colors"> <option value ="Black"> Choose One</option> <option value="Red">Red</option> <option value="Blue">Blue</option> <option value="Yellow">Yellow</option> <option value="Green">Green</option> <option value="Purple">Purple</option> </select> Value: <input type="radio" id="num" value ="1" /> 1 <input type="radio" id="num" value ="2" /> 2 <input type="radio" id="num" value ="3" /> 3 <input type="radio" id="num" value ="4" /> 4 <input type="radio" id="num" value ="5" /> 5 <br/> <!-- End of forth form line --> <!-- Start of fifth form line --> Label 4: <input type="text" id="label4" value="Poland"> <select id="colors"> <option value ="Black"> Choose One</option> <option value="Red">Red</option> <option value="Blue">Blue</option> <option value="Yellow">Yellow</option> <option value="Green">Green</option> <option value="Purple">Purple</option> </select> Value: <input type="radio" id="num" value ="1" /> 1 <input type="radio" id="num" value ="2" /> 2 <input type="radio" id="num" value ="3" /> 3 <input type="radio" id="num" value ="4" /> 4 <input type="radio" id="num" value ="5" /> 5 <br/> <!-- End of fifth form line --> <!-- Start of fifth form line --> Label 5: <input type="text" id="label5" value="Congo"> <select id="colors"> <option value ="Black"> Choose One</option> <option value="Red">Red</option> <option value="Blue">Blue</option> <option value="Yellow">Yellow</option> <option value="Green">Green</option> <option value="Purple">Purple</option> </select> Value: <input type="radio" id="num" value ="1" /> 1 <input type="radio" id="num" value ="2" /> 2 <input type="radio" id="num" value ="3" /> 3 <input type="radio" id="num" value ="4" /> 4 <input type="radio" id="num" value ="5" /> 5 <br/> <!-- End of fifth form line --> <!-- Make Table and Reset Buttons--> <input type="button" value ="Make Table" onclick="MakeTable(myform)" > <input type="Reset" value ="Reset" > </form> </body> </html> [CODE] any help would be appriciated ok so I am having some problem with an assignment i have for a JavaScript class i am taking i am new to JavaScript and don't know how to do this. he wants me to take a website and that he gave us. 1. Create a function named displayEntries() that summarizes the user entries and displays them in an alert. 2. Create an event handler for the Update button that calls the displayEntries() function. i have to display first name last name mi address city state zip phone and date of birth. I am not sure how to take the input data and display it in an alert. it sounds like it should be easy i just do it. plz help. Hi I need Help can I use Java Script in php orrr php in javascript. http://www.goodclassified.com/ Please Reply Soon Example |