Featured Categories
-
Lectora®
Lectora® is the most trusted authoring tool in the world. Rock out your creativity! Author courses any way you like. Lectora adheres to best practices for Accessibility and Web Content Accessibility Guidelines (WCAG), offers responsive authoring for eLearning, and publishes to any LMS (Learning Management System).
-
CenarioVR®
Experience virtual reality through CenarioVR®, our training and virtual reality (VR) authoring software that allows you to create immersive learning in minutes! No coding required!
-
Rockstar Learning Platform®
Our Rockstar Learning Platform® has all the features you’ll love. Help your employees be better at their jobs, more valuable to your company, and most effective in servicing your customers.
-
The Training Arcade®
Level up your learner engagement with the Training Arcade®! The Training Arcade is a library of fun, mobile-ready, casual games that can be rapidly customized with your content to create effective gaming!
-
ELB Learning Content
Did you know that our AssetLibrary™ has over 120 million engaging, interactive, and awe-inspiring templates and assets to help you become an eLearning Rockstar®?
Formatting in-line variables

I have been using Lectora for few months now and really enjoy the program. Recently, I discovered variables. This opened up so many possibilities for creating algorithmic questions. However, I am not able to find a way to format my in-line variables.
Based on my research, I have to use JavaScript in order to format them. Unfortunately, I am not a programmer and have no knowledge of JavaScript. I tried to find functions online that I can use, but I was not able to make them run in Lectora. I know how to add external HTML Extension and how to add action in order to run JavaScript. However, I do not know exactly how to make programs run.
For instance, I have a page with the text box that contains a variable and I would like to be able to do two things:
- align the number to the right (in situations where the variable is the only item containing text box).
- format the number with a comma as a thousand separator. I would like to be able to format both numbers with decimals and without decimals.
I apologize if my questions are not making sense. I am complete JavaScript novice. I would appreciate any help with this, as it opens up the possibility of creating virtually unlimited practice for my students.
Thank you in advance.
Comments
-
I think this does what you want. I grabbed a script from Stack Overflow (no sense in rebuilding the wheel) and ran the user created variable myNum through it. I then reassigned the formatted result back to the myNum variable.
To make it right align I just changed the paragraph setting on the text box to align-right.
The .awt file is in the zip as well. Hope this helps.
0 -
Thank you for looking at this. And please forgive my ignorance. As I mentioned, JavaScript is a bit of a "black magic" for me at this time.
It seems that in your file, the script "translate" the string of numbers into a formatted number while it is triggered by pressing of the button, the "event". I tried to adjust it to use it in my file on "show", but I was unsuccessful. Again, probably because I am just learning, so please be patient with me.
I need the number to be formatted in the text-box, when the question loads. Secondly, if I can format the input into the entry field triggered by the student just entering the number it would be perfect.
I am not sure whether I am explaining this clearly, so I am attaching one of the questions I am working on, hopefully, that will help. In this question, I have inline variables A1 to A6 in the text-boxes. These variables will be used by the student to calculate the balance in the account. They are only displayed by the program. I hope to have them shown with the comma separators.
Then student will input the answer into the entry field and I hope to have that field format the number automatically on input. So, the number would be shown with commas and aligned to the right. I was able to use your code to do that, however, it only works for numbers lower than 10,000. See the actions attached to Entry_DR_Bal. Perhaps, I changed something I should not have.
Thank you so much for your help. I am so excited that it may be possible!
Also, do I need to have the script written for every variable separately? or is there a way to have a "function" defined in the external HTML extension and run the option with the action for the specific text box. I am just hoping that there is a more efficient way to do this, because I may have quite a few variables and input boxes in the module.0 -
Hi, Lydia. Thanks for posting the samples in both threads. I will have to pick these up again tomorrow as I am off to meetings for the rest of the day. Tim or Math, if they are around, will also be able to get you in the right direction.0
-
Thank you so much. I appreciate the help. Enjoy the meeting.0
-
I wouldn't format the actual variable value, you couldn't calculate with their values later on. Wouldn't it better to just format the text in the fields? Inline variable replacement may be difficult here.
What is the correct answer to the question? You're calculating the correct answer in the variable A7? As the values on the debit side are always bigger than the credit values, the correct answer would be: No entry in the left field and the value of A7 in the right?0 -
Hi Tim,
Formatting text in the text fields would work perfectly, as I just need the numbers to display as a number with comma as a separator. However, I believe that it would have to be done with JavaScript ,since Lectora does not give an option to format numbers with comma as a separator. At least I was not able to find it.
The correct answer is A1+A2+A3-A4-A5-A6 and it is calculated in A7. On submit (not in the sample) A7 is compared to Entry_0001 (left field) and Entry_0002 (right field) is empty for this particular question.
Thank you for looking at this.0 -
Hi Lydia,
it has been more of a challenge than I thought (thanks for that) and I couldn't hold my promise to only format the text ;-)
0 -
Nice work, Tim.0
-
Tim,
I appreciate the help. Being able to do this, would open so many possibilities to create the content for the students that gives them unlimited practice.
I hate to be a pain, but it seems like the form has to be reset to show the variables with comma separators. Is that correct? I need the variables in the text-box to show as numbers separated by the commas on page show.
In my efforts to make the file smaller, I may have took out too much, so please see attached zip file with the entire question.
I like how Darrel's code worked for the entry fields, as it formatted the text as the student typed, but it only worked for the numbers below 10,000. Is there a way to adjust it, so it works for larger numbers?
Also, is there a way to format how the inline variables appear on page show? I have other questions that I am working on that have text and variable in the text box. Hopefully, with a HTML extension on the title or test level defining the function, that can then be easily called with action to "run JavaScript"...with time I am determined to learn JavaScript so I am comfortable with using it, but for now I am a complete novice. (lol)
Sorry for all the questions. You guys are amazing for helping! Thank you0 -
Tim beat me... well here is my version ;-)
https://community.trivantis.com/shared-content/formatting-input-fields-and-more/
The open questions you had on Tim's latest version and the > 10,000 thingy are solved in my solution.
The > 10,000 was because of the RegEx you used. I am no RegEx expert either, so had to Google about it too...
The RegEx you used, works on every 3 digits... so 1,00...next digit it triggers... and so on... some Googling got me
too a solution using if/thens whenever you have more then 3 digits...
For onShow you have to make sure you have all in 1 function...then you can call that onShow. Some delay needed i notice, and still not yet perfect....if you type quick...some letters wont count...
Well not perfect yet, but also a step further...
Kind regards,
Math0 -
That is awesome Math. I am learning so much through this! Thank you.
The function for the Entry filed formatting seems to be putting dots in unexpected places.
For instance:- input: 5621235; output 5,621.235
- input: 69852147; output: 6,985.214.7
Also, Renaming the fields to include the HTML name is brilliant!
Thank you for the link to the resources on www.w3schools.com.0 -
I know, i made a mistake.. The dots are intended... i abusively interpreted it as , for thousands... and then . for lower values.... for sure something to learn from it, but Tim's sample better fits your needs. Trying to get some of the things from mine to Tims... to get the formatting in Tims on show...either add some delay or get rid of the pageTransition...
That one prevents it...0 -
In fact only some minor changes to Tim's version and its exactly as you need/want.
For your education... to ensure it has the proper format at show/start... the pageTransition ( a fade ) takes some time.
So when a transition is running other functions wont work...so adding some time-delay to the initial functions made sure that onShow properly shows the proper format.
Other change on Tim's version was in the 2 inputfields. The first one was set to 10 characters limit. Changing that to 40 and you can go zillions ;-)
Thats all...
Kind regards,
Math0 -
Doesn't it work?
There are some Reset form actions but these are not related to reformatting the numbers with commas. They exist to reset the entry fields to a value of "0", in case that is needed. It is needed when a user removes all content from an entry field or clicks the "x" to clear the entry field. Then the script tries to calculate whith the new value and returns "NaN" because the empty field is Not a Number. Only then the field is reset to replace "NaN" with "0".0 -
@timk your pageTransition caused it to NaN at start... in my zip based on your version i just added some delay on those actions at show... and then it works perfectly.0
-
It works! All of you have been amazing! (I may be a bit too excited by this. Sorry...:D)
It will take a bit of studying of the file on my part to be comfortable with the usage of these functions, but I think I can take it from here. I may ask you again if I can't make it run for a different question.
Another problem: The way you formatted the number (ex A1) in the text box will only work if there is no other text in the text box, is this correct? So if I have a question that contain more text in the text box with the variable, how can I make it format?
Thank you again.0 -
@mnotermans5114
Thanks. I didn't realize there was a transition in the sample when previewing the single page. I should have published. I used Lectora 17.0.6, maybe the transitions changed after that. I usually avoid all transitions whenever possible, too much effort for too little effect ;-)
Another thing to learn from: You can test as much as you want on your side, there's no guarantee it'll work somewhere else ... and I couldn't count the number of times I pressed F5, to make A7 a negative value which only happens once in a 1,00,0 whiles.0 -
Apparently the transition was inherited from the template. Although, it does not seem like it is really making any difference to the view of feel of the page, so I may follow your example and take it out.
Something new I have learned! Thanks Tim0 -
@timk Agree on all, and i could have known it wasnot your transition ;-) I too avoid them mostly. When testing your own work, at some point you get blind for other approaches. So always good to let others do some tests, you often encounter things you didnot think of :-)0
-
@mnotermans5114
Math,
I see in your file you use the "CSS Align Input fields to the right" to justify the input fields. This works great and even I can use it! However, it justifies all the entry fields on the page. Is there a way to target specific fields, but not others? And if so how would I go about it?
Thank you so much!0 -
<span class="handle-sign">@</span>CarlFink
I tried doing that based on this post, but it seems that the fields get justified, but the formatting brings all the other values back to the default (like entry field height etc). This creates whole bunch of other issues, because I need fields right justified that are of various sizes etc. (Perhaps, I did something wrong...I am unfamiliar with using CSS or Javascript, so it is very possible. lol)
Math's code did exactly what I needed, but on the global scale. If I can use this code to target a specific field that would be perfect solution, as it seems easy to use.
Any ideas?
Thank you0 -
<span class="handle-sign">@</span>lb1730 Lidia, Carl's solution should work. you can target specific input- or textfields. Doublecheck anything you can find in the forum about CSS and classes... in the end that will help. Also important to watch the difference between Lectora 17 ( or before ), 18 and Lectora Online...all have differences... As Carl stated...i havenot been around a lot... one reason is offcourse work keeping me busy...
I dont have L18... but in L17 and Lectora Online i can make a sample if time permits this week.. Let me know if you need it, and i see if i can make time...0 -
@mnotermans
I really appreciate you taking the time to respond.
I have search and tried, but I am afraid that my lack of knowledge is preventing me from getting it to work.
I followed the instructions on the post mentioned by Carl and got the field to be right justified and used your code to add the commas as thousand separators, but the code changed the way the entry field looks. It took out all my other changes to the field and upon input it seems as it took the field back to default.
Is it possible to alter your code to target specific field?
Your code:
<style>
input{
text-align:right;
}
</style>
The above code justifies all the fields. I need to target the specific one.
You also used this code to add commas as thousand separators:
var theentry = document.getElementById("%HTMLNAME%id").value.replace(/,/g, '');
document.getElementById("%HTMLNAME%id").value = parseFloat(theentry).toLocaleString('en');
VarEntry_0001.set(document.getElementById("%HTMLNAME%id").value);
Thank you again for that code! It works amazing and it is easy to use. Is there a way to add decimal places? I tried the currency, but it adds a dollar sign, which I do not want. I tried to add the minimum and maximumFractionDigits, but it disallowed number larger than one integer.
If you are able to, I would appreciate any help you may offer. Thank you for responding either way Math.
0 -
Deja vu. Use search, we did this already.0
Categories
- 35.9K All Categories
- 110 ✫ Announcements
- 33.2K Lectora®
- 31.1K Lectora Discussions
- 29K Lectora Desktop
- 2K Lectora Online
- 2K Lectora Feature Requests
- 71 Lectora User Groups
- 27 ELB Learning Content
- 27 ELB Learning Content Discussions
- 345 CenarioVR®
- 205 CenarioVR Discussions
- 140 CenarioVR Feature Requests
- 44 Rockstar Learning Platform®
- 41 Rockstar Learning Platform Discussions
- 108 CourseMill®
- 108 CourseMill Discussions
- 48 ReviewLink®
- 48 ReviewLink Discussions
- 7 The Training Arcade®
- 7 The Training Arcade Discussions
- 938 All Things eLearning
- 39 eLearning Development
- 546 Learning Management System (LMS) Integration
- 333 Web Accessibility
- 1.2K ♪ The Green Room
- 9 Additional Learning Products