Notretsam Posted January 19, 2018 Share Posted January 19, 2018 Am more familiar with PHP than Javascript, so not sure how to fix this strange bug. basically have a wrestling game where people can do matches against other people, naturally I have a match list that person can view there current active matches and click to go to match. I use a onclick event, which contains the $matchid, then the following javascript <script type="text/javascript"> function matchshow($sids) { var x=$sids; var cstyle = document.getElementById('fcstyle').value; window.location.href = "match.php?sid=" + x + "&cstyle=" + cstyle; } </script> Don't need to worry about the cstyle, that is the current tab the person is viewing in match. The var x=$sids is what contains the match id number. Now I just recently moved hosting companies, and the match list was working fine on old host and new host, but all of a sudden today it stopped working. I managed to figure out why, but just don't know how to fix it. actual=151636871863316991 showing=151636871863317000 actual=1516368718560392395 showing=1516368718560392400 The actual is the actual match id, the showing is what javascript is sending across in the window.location.href, its the last 4 digits that are wrong and appears it rounding the figure up. I have no idea why it all of a sudden doing this, is there a way to prevent it from rounding the number up? I did just have to increase the length of the match id today, due to another bug I run into, so presume that is related to why this suddenly happening. Link to comment Share on other sites More sharing options...
justsomeguy Posted January 19, 2018 Share Posted January 19, 2018 is there a way to prevent it from rounding the number up? You really think that Javascript is just arbitrarily rounding a number for no apparent reason? I bet that's not the problem. I bet the problem is that's the actual value that you're passing to that function, and you need to work backwards to figure out why if you don't think that's the correct value. Otherwise, one issue might be that the number is bigger than what Javascript can represent as a number, so make sure you're treating that value as a string and not a number. If you're just putting it into the URL and redirecting then you don't need to treat it like a number. Link to comment Share on other sites More sharing options...
Notretsam Posted January 19, 2018 Author Share Posted January 19, 2018 (edited) well javascript is just magically rounding the number up as you can clearly see by my original post, where I have shown the actual/showing numbers. I have already investigated why it occurring, I looked at view source and the form with the onclick event, I can clearly see the correct number in there. The number is correct before the function shown in my original post, then during the javascript function, or the window.location event changing you to match.php page, the number is rounded up. I have read about javascripts limitations with numbers, and a friend mentioned using string. I tried below and the onclick event wouldn't occur at all. <script type="text/javascript"> function matchshow(string($sids)) { var x=$sids; var cstyle = document.getElementById('fcstyle').value; window.location.href = "match.php?sid=" + x + "&cstyle=" + cstyle; } </script> I also tried var x = string($sids); I don't know javascript very well , so maybe am using it incorrectly? Also when I manually type the url into browser with the actual number id, the page works fine, so there no issues on match.php I really have exhausted every possible fix that I can think off, and already worked backwards, which is why I identified the actual number for match id being incorrect, and it appearing too being rounded up. Edited January 19, 2018 by Notretsam Link to comment Share on other sites More sharing options...
Ingolme Posted January 19, 2018 Share Posted January 19, 2018 Where is the function being called? You can't fix this from inside the function, you have to fix it in the code that's calling the function. The number is likely much too large for Javascript to represent. Converting it back to a string after the precision was lost is not going to recover the lost precision. This is not valid syntax, so it's not going to work. function matchshow(string($sids)) { Link to comment Share on other sites More sharing options...
Notretsam Posted January 19, 2018 Author Share Posted January 19, 2018 <div class='contframeturn' onclick='matchshow(151636871863316991)'> function is called in div opening tag, basically there is a mysql query that loops through database and outputs each match on a page, during that the above id for match is attached to the onclick event oh while I type this , am wondering if is it because I wrapped it with ' and not " ? Link to comment Share on other sites More sharing options...
Ingolme Posted January 19, 2018 Share Posted January 19, 2018 No, the main problem is that the number is too large for Javascript to represent it correctly. Pass it in as a string instead by wrapping it in quotation marks, like this: matchshow("151636871863316991") Link to comment Share on other sites More sharing options...
Notretsam Posted January 19, 2018 Author Share Posted January 19, 2018 31 minutes ago, Ingolme said: No, the main problem is that the number is too large for Javascript to represent it correctly. Pass it in as a string instead by wrapping it in quotation marks, like this: matchshow("151636871863316991") ok thanks, its 8.46PM for me now, so shall be tomorrow before I can try. I do echo the text out due to there being a variety of different match lists and options person viewing can select on page. echo "<div class='contframeturn' onclick='matchshow("$matchID")'>"; Presume the " won't work in the above echo line? Link to comment Share on other sites More sharing options...
Ingolme Posted January 19, 2018 Share Posted January 19, 2018 That will probably work, considering that HTML parses all entities before executing anything. Alternatively, you can just escape double quotes with a backslash. echo "<div class='contframeturn' onclick='matchshow(\"$matchID\")'>"; Link to comment Share on other sites More sharing options...
Notretsam Posted January 20, 2018 Author Share Posted January 20, 2018 tested this morning and using " worked it is amazing that something so simple to do , is all that was needed to fix it lol thank you for help Ingolme Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now