JavaScript - Addition Instead Of Concatenation
Code:
var purchasePrice = window.prompt("Please enter the purchase price:", 0); function calculateTotalCost () { if (purchasePrice <= 25) { purchasePrice = purchasePrice + 1.50; } else { purchasePrice = purchasePrice + (purchasePrice * 0.10); } window.alert("Your total price is $ " + purchasePrice); } I am still getting the same error, concatenation instead of addition, i can't figure out why. (i.e input 50, result 505 instead of 55.) Similar TutorialsI'm pretty new to Javascript programming. I have this function I created that is basically pretty simple. It does edit checks, however, at the end of my script, I display an error message using an alert statement and at the end of the first sentence, the word "undefined" shows up before the line break. The only thing I can think of that is causing it is the "+" sign. Here is my code below: Code: function CheckEdits() { var msg; ok = true; if (document.getElementById("txtName").value == '') { msg = msg + '\nName'; ok = false; } if (document.getElementById("txtOrganization").value == '') { msg = msg + '\nOrganization'; ok = false; } if (document.getElementById("txtSubject").value == '') { msg = msg + '\nSubject'; ok = false; } if (document.getElementById("txtNote").value == '') { msg = msg + '\nNote'; ok = false; } if (msg != '') { var msg2; msg2 = "Please provide the following:\n" + msg; alert(msg2); } } What am I doing wrong? Thanks! New to javascript and not familiar with the variable concatenation or for/next loop procedures. The following code works, but I am adding 50 more division id's numbered 'c3' to 'c52' and need to know how to simplify this function. Thanks for your help! Code: <script type="text/javascript"> <!-- function collapseAll() { var el = document.getElementById('c1'); if ( el.style.display = 'none' ) {el.style.display != "none";} else {el.style.display = '';} var el = document.getElementById('c2'); if ( el.style.display = 'none' ) {el.style.display != "none";} else {el.style.display = '';} } </script> I have concatenated list of posts, whereby a user can comment on each one (and the comment gets a live update via jquery). I decided that since I'm using a unique variable for each post, I could just tack that onto the end of the id of the update div, and also tack it onto the end of the class of the submit button, like so: PHP Code: $my_list .= ' <form action="#" method="post"> <textarea class="commentbox" name="comment" id="comment"></textarea> <input type="hidden" name="post_id" id="post_id" value=' . $post_id . ' /> <input type="hidden" name="member_id" id="member_id" value=' . $id . ' /> <input type="submit" class="submit' . $post_id . '" value="Comment " /> </form> ' . $comment_list . ' // existing comments queried from the db <ol id="update' . $post_id . '"></ol> // jquery-ed live update comments '; ?> Everything with respect to the above looks fine (i.e. each submit button gets a unique class and each update div gets a unique id). So the problem I'm running into now is: how do I get my js function to recognize each of the unique "submits"? This is what I have now (below). But whenever I click on a submit button next to a post, nothing happens, my page just reloads and a "#" gets added to the end of the url. I checked my live http headers, and it looks like the comment is getting posted along with the correct unique $post_id... but I believe it's stopping at the js function. Code: <head> <script type="text/javascript"> $(function() { $(".submit<?php echo $post_id; ?>").click(function() { var post_id = $("#post_id").val(); // this is the unique id for each story, in a hidden input var member_id = $("#member_id").val(); // this is a member for the commenter, in a hidden input var comment = $("#comment").val(); // this is the comment from the input box var dataString = 'post_id='+ post_id + '&member_id=' + member_id + '&comment=' + comment; if(comment=='') { alert('Please enter a valid comment'); } else { $("#flash").show(); $("#flash").fadeIn(400).html('<span class="loading">Loading Comment...</span>'); $.ajax({ type: "POST", url: "commentajax.php", data: dataString, cache: false, success: function(html){ $("#update<?php echo $post_id; ?>").append(html); $("#update<?php echo $post_id; ?> li:last").fadeIn("slow"); document.getElementById('post_id').value=''; document.getElementById('member_id').value=''; document.getElementById('comment').value=''; $("#comment").focus(); $("#flash").hide(); } }); } return false; }); }); </script> </head> hat i'm trying to achieve is to add two numbers using do while loop. below is the code however result wont show up. i cant seem to determine the error. help me pls. Quote: <script = "text/javascript"> function myanswer(x,y){ x=parseInt(x); y=parseInt(y); i=1; sum=0; do { sum=x+i; i++; } while(i<y) document.myform.asnwer.value=sum; } </script> <form name='myform'> Enter First number:<input type='text' name='x'></br> Enter Second number:<input type='text' name'y'></br> Result:<input type='text' name='answer'></br> <input type='button' value='Click on Me!' onclick="myanswer(myform.x.value,myform.y.value);"</br> </form> Dear Experts I have following codes, it works fine to sum. but when I enter these values 2100.49+100.20 then it says 2,200.6,899,999,999,996 insted of 2,200.69. How to overcome this problem. Please help Code: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="language" content="english"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>Numeric Textbox Sample</title> <style type="text/css"> #box1 {width:200px;height:170px;border:1px solid green;background:#e3eeff;padding-top:20px;} .button {width:100px;margin-top:0px;} body { margin:0; margin-top:100px; } </style> <script language="javascript"> function validate(evt) { var theEvent = evt || window.event; var key = theEvent.keyCode || theEvent.which; var backslsh = key; var chck = String.fromCharCode( key ); var regex = /[0-9]|\./; if( !regex.test(chck) ) { theEvent.returnValue = false; if(theEvent.preventDefault) theEvent.preventDefault(); } } function addCommas(nStr) { nStr += ''; var x = nStr.split('.'); var x1 = x[0]; var x2 = x.length > 1 ? '.' + x[1] : '.00'; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2') } return x1 + x2; } function fncSum2() { var amount1=form2.text1.value; var amount2=form2.text2.value; var a = amount1.replace(/[^0-9\.]/g,""); var b = amount2.replace(/[^0-9\.]/g,""); var nStr = (Number(a) + Number(b)).toString(); var rgx = /(\d+)(\d{3})/; while (rgx.test(nStr)) { nStr = nStr.replace(rgx, '$1,$2'); } //nStr = "$" + nStr; // if $ prefix required if (nStr.indexOf('.') == -1) { // if whole number add .00 nStr = nStr + ".00" } nStr = nStr.replace(/(\.\d)$/,"$10"); // if only one DP add another 0 return nStr } </script> </head> <body onload="form2.text1.focus()" > <center> <p>Enter 2100.49 in Amount</p> <p>Enter 100.20 in Tax</p> <p> and press + button<br> It shows 2,200.6,899,999,999,996<br> but I need 2,200.69</p> </p> <div id="box1"> <form name=form2> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr><td>Amount</td> <td><input type=text name=text1 size=15 value="" onkeypress='validate(event)' onfocus="this.select ()" onblur="form2.text1.value=addCommas(form2.text1.value)" > </td></tr> <tr><td>Tax</td> <td><input type=text name=text2 size=15 value="" onkeypress='validate(event)' onblur="form2.text2.value=addCommas(form2.text2.value)"></td></tr> <tr><td>Result</td><td><input type=text name=text3 size=15 value="" disabled></td></tr> </table> <hr> <input class="button" type=button name=command1 value="+" onclick="form2.text3.value=fncSum2()"><br> <input class="button" type=button name=command8 value="Focus" onclick="form2.text1.select ()";"form2.text1.focus()"><br> <input class="button" type=reset name=command9 value="Reset"> </form> </div> </center> </body> </html> Hi, I'm just learning JS by going through a book, while trying one of the examples in the book I ran into a problem with " + " operator. It think it's best I show by example (don't worry it's a fairly short script): Script Code: /* This is an attempt to do some math with javascript */ var a; var b; var c; a = prompt("Pick your favorite number"); b = prompt("Pick your second favorite number"); c = a + b document.write("a = " + a + ", b = " + b + ", c = " + c + "<br />"); document.write("<br />a + b = " + c + "<br />"); c += 6 document.write("<br />c + 6 = " + c + "<br />"); c -= 5 document.write("<br />c - 5 = " + c + "<br />"); c *= 3 document.write("<br />c * 3 =" + c + "<br />"); c /= 2 document.write("<br />c / 2 = " + c + "<br />"); c %= 7 document.write("<br />c % 7 = " + c + "<br />"); if (c > 0) { document.write("<br /> Wrong!"); } else { document.write("<br /> You, I like") } Output Quote: a = 3, b = 4, c = 34 a + b = 34 c + 6 = 346 c - 5 = 341 c * 3 =1023 c / 2 = 511.5 c % 7 = 0.5 Wrong! As you can see the script doesn't execute the mathematical operation for addition. It instead strings it together. What am I doing wrong? So what I know about JS, you could write on a postage stamp, but I want t6o know if this is possible: On Page A: The user fills out a form, stating how many of each time of item they want, and the clicks submit, which mails the form to me (GenericPHP Mailer), and is rederected to page B. (That I can do) On Page B: The value of the items in the form on Page A is calculated, then a link is generated with a random order number, and the value of the order as link parameters. Can I do this? and how? Ok, so I have 4 textboxes with ids payment, payment1, payment2, payment3 and with each box is a submit button, named submt1-4 I need to know how I can add all of the values into one textbox named total. so when submit1 is clicked, it will add payment to the total, then when submit2 is clicked, it will add payment1 to the value, etc. But, each text box could be used more than once, so payment could be used 8 times, and each of the 8 times, it needs to add the proper value to the total. how would I do something like this? I need help adding an additional function to some existing java script code I already have. In addition to the functions already on this js, I want make it so the banner displays one of the images randomly on each new page load. I have an external js file that this page also links too. Not sure if I need to post that also. I was hoping to just add to this code. Any help is greatly appreciated <script type="text/javascript" src="js/homepage-banners/simplegallery.js"> </script> <script type="text/javascript"> var mygallery=new simpleGallery({ wrapperid: "simplegallery1", dimensions: [250, 180], imagearray: [ ["img/headers/automotive.jpg", "http://www.visionsystem.com/applications/automotive_metal.php", "", ""], ["img/headers/electrical.jpg", "http://www.visionsystem.com/applications/electronics.php", "", ""], ["img/headers/food-packaging.jpg", "http://www.visionsystem.com/applications/food_pharmaceutical.php", "", ""], ["img/headers/medical-pharmaceutical.jpg", "http://www.visionsystem.com/applications/food_pharmaceutical.php", "", ""], ["img/headers/semiconductor.jpg", "http://www.visionsystem.com/applications/electronics.php", "", ""], ["img/headers/automation.jpg", "http://www.visionsystem.com/applications/food_pharmaceutical.php", "", ""] ], autoplay: [false, 2500, 2], persist: false, fadeduration: 500, oninit:function(){ }, onslide:function(curslide, i){ } }) </script> Hello. Sorry the code example might be a little long but it's repetitive and should be easy to understand. http://jsbin.com/eyeke4/13/edit My real code has 12 examples and not 3 but for the sake of this I had to shorten it as much as possible. When you go on there and preview it, you Select a level, then select a hero, then select 3 items and hit click me. This will give you a result of statistics. Now my problem is all the way on the right you will see all 3 values of AP are added together. In the last column alone. The thing about it is if you change item #1 and item #2 it does not update properly..to update it you MUST change the last item each time, which is inconvenient. The way it works is : daap1 = iap1[isi1]; daap2 = iap2[isi2]; daap3 = iap3[isi3]; totalap = (daap1 + daap2 + daap3); $(".tap").html(totalap); Pretty much like this in a nutshell. if I were to put $(".tap").html((iap1[isi1] + iap2[isi2] + iap3[isi3])); it works perfectly fine. But I need to use the variable totalap in formulas. How do I make it so things always update properly without the user having to do inconvenient things like always having to reselect the last dropdown? In my main code I have 12 total, 6 and 6 split apart, for me to currently get accurate info I must reselect the 6th and 12th item every single time. Any help on how I could achieve this would be very much appreciated, do I need a database or something? I don't mind what I need as long as it would work perfectly. Thanks in advance. |