views:

89

answers:

2

I'm a noob at Javascript, but I'm trying to implement something on my website where users can type a quantity, and the subtotal updates dynamically as they type. For example: if items are 10 dollars each, and a user types 5 in the text field I would like it to show $50 next to the text box. Pretty simple multiplication, but I don't know how to do it with Javascript. I think onKeyPress somehow? Thanks!

A: 

You should handle 'onkeyup' and 'onpaste' events to ensure you capture changes by keyboard and via clipboard paste events.

<input id='myinput' />
<script>
  var myinput = document.getElementById('myinput');
  function changeHandler() {
    // here, you can access the input value with 'myinput.value' or 'this.value'
  }
  myinput.onkeyup = myinput.onpaste = changeHandler;
</script>

Similarly, use getElementById and the element's innerHTML attribute to set the contents of an element when you want to show the result.

sje397
is `onpaste` considered standard? `onchange` might be a good alternative.
lincolnk
+4  A: 

Assuming the following HTML:

<input type="text" id="numberField"/>
<span id="result"></span>

JavaScript:

window.onload = function() {
   var base = 10;
   var numberField = document.getElementById('numberField');
   numberField.onkeyup = numberField.onpaste = function() {
      if(this.value.length == 0) {
         document.getElementById('result').innerHTML = '';
         return;
      }
      var number = parseInt(this.value);
      if(isNaN(number)) return;
      document.getElementById('result').innerHTML = number * base;
   };
   numberField.onkeyup(); //could just as easily have been onpaste();
};

Here's a working example.

Jacob Relkin
Aha! This works perfectly! Just one other thing, is there a way to have it calculate the same thing for the default value in the text field, before any input from the user? Thanks :)
RobHardgood
@RobHardgood, I edited my answer. Try it, it should work.
Jacob Relkin
So it did... thanks again!
RobHardgood
@RobHardgood, You can also upvote this answer by clicking on the up arrow. :)
Jacob Relkin
Okay! I just upvoted it. Thanks again
RobHardgood