gundogdu.i
gundogdu.i

Reputation: 13

Addition not working in Javascript

I'm really new to Javascript and trying to create a form where I'm running into some trouble...

When I use + it does not add up to the value, instead it just puts it back to back. Ex: 5+10 (510)

Here's my code if you want to take a look at it. I'd appreciate any help since I can't figure this out on my own.

var service = document.getElementById("service");
var serviceprice = service.options[service.selectedIndex].id;

var tech = document.getElementById("tech");
var techprice = tech.options[tech.selectedIndex].id;

var hours = document.getElementById("hours").value;

// The error happens here
var total = techprice * hours + serviceprice; 

I also have an html part which the script gets the data from.

Upvotes: 1

Views: 1211

Answers (4)

Jay Reeve
Jay Reeve

Reputation: 151

This is not especially elegant, but I find it simple, easy, and useful:

var total = -(-techprice * hours - serviceprice);

or even:

var total = techprice * hours -(-serviceprice);

They both eliminate the ambiguous + operator.

Upvotes: 0

Paul
Paul

Reputation: 141827

That happens whenever you have a string rather than a number. The + operator performs concatenation for strings. Make sure you parse your strings to numbers using parseFloat or parseInt:

var service = document.getElementById("service");
var serviceprice = parseInt(service.options[service.selectedIndex].id, 10);
var tech = document.getElementById("tech");
var techprice = parseInt(tech.options[tech.selectedIndex].id, 10);
var hours = parseInt(document.getElementById("hours").value, 10);

Note that parseInt takes an argument to specify the base. You almost always want base 10.

Upvotes: 4

Lord Midi
Lord Midi

Reputation: 804

Try to convert the string to int first with parseInt or to float with parseFloat

Upvotes: 0

Nicolae Olariu
Nicolae Olariu

Reputation: 2555

Try changing this line:

var total = techprice * hours + serviceprice;

to

var total = techprice * hours + parseFloat(serviceprice);

I suspect 'servicePrice' is a string, and it will then try to concatenate the first value (let's say: 100) with the second value (which is, not a number, but a string, let's say 'test'), the result being '100test'.

Upvotes: 0

Related Questions