admin管理员组文章数量:1401264
I am trying to update an input with 2 other inputs. For example
Amount : (user inputs value)
Fee: (value is already set -- disabled value: 0.0002)
Total: (amount - fee) worked out via javascript below
$('#amount').keypress(function() {
var total = $('#amount').val() - $('#fee').val();
if(typeof total != 'undefined'){ $('#total').val(total) }});
When I 'keypress' on my input with a number, it is one step behind updating the input with total.
Say for an example if I type 1 in the input amount, the total will be -0.0002(the fee) when I press 1 again, it will be 0.9998 (even though the amount input is now 11 so on so forth.)
I am trying to update an input with 2 other inputs. For example
Amount : (user inputs value)
Fee: (value is already set -- disabled value: 0.0002)
Total: (amount - fee) worked out via javascript below
$('#amount').keypress(function() {
var total = $('#amount').val() - $('#fee').val();
if(typeof total != 'undefined'){ $('#total').val(total) }});
When I 'keypress' on my input with a number, it is one step behind updating the input with total.
Say for an example if I type 1 in the input amount, the total will be -0.0002(the fee) when I press 1 again, it will be 0.9998 (even though the amount input is now 11 so on so forth.)
Share Improve this question asked Feb 9, 2015 at 23:41 john smithjohn smith 3272 silver badges16 bronze badges 3- That worked. I need to look up different .key to see the difference. Thank you. – john smith Commented Feb 9, 2015 at 23:46
- Should I include it as an answer? :P – JJJ Commented Feb 9, 2015 at 23:48
-
The
input
Event is a better option. It's faster. I posted an answer below – Derk Jan Speelman Commented Mar 21, 2019 at 9:20
3 Answers
Reset to default 6It's cause of you're using keypress
which consists of 2 events keydown
and keyup
, so your function launches on the first one - keydown
, so you get your values, as you said "one step behind", cause when the keydown event is fired your input field didn't recieve the pressed key value yet. Use keyup
and you will get your result:
$('#amount').keyup(function() {
var total = $('#amount').val() - $('#fee').val();
if(typeof total != 'undefined') $('#total').val(total)
});
Fiddle
The posted answers are good answers, but the best event to use here is the oninput
event, because it's faster.
$('#amount').on('input', function() {
var total = $('#amount').val() - $('#fee').val();
if(typeof total != 'undefined'){
$('#total').val(total);
}
});
Supported by all browsers: browser support. It's actually better supported than onchange
and other events like onkeyup
. You can pare that on https://caniuse./.
You can even use this event for other input elements as well. Like checkboxes, radio buttons and the select element.
It's fast. So you can bine this with search queries to make your search results return faster.
Please note: since this is not a keyboard event, there won't be a keyCode
or any other keyboard related value in the event.
Read more
- Event Reference
- Global Event Handler
True, because when function is called the field is not updated with the value
The event is called in this steps
- Keydown
- Keypress
- updateview
- Keypress
- updateview
- keyup
So if you can change this event to keyup then you will get the latest value.
本文标签: javascriptOnkeypress update input is 1 step behindStack Overflow
版权声明:本文标题:javascript - Onkeypress update input is 1 step behind - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744297333a2599405.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论