增加和减少应该在当前值上加或减0.1。它们设置相同。由于某种原因,减少工作(1.0变为0.9,0.8等)但增加不会(1.0变为1.00.1),就好像它连接一个字符串一样。
我已尝试使用parseInt和parseFloat,但在增加new_value = current_value + 0.1
时没有运气,但减少确实有效new_value = current_value - 0.1
我希望两者都能按照设置的方式工作。
HTML:
<button data-direction="increase">increase</button>
<button data-direction="decrease">decrease</button>
<input value="1.0" />
JS:
$(function() {
var button = $('button');
button.click(function() {
var button = $(this);
var direction = button.data('direction');
var input = $('input');
var current_value = parseFloat( input.val() ).toFixed(1);
var new_value;
if (direction=='increase') {
new_value = current_value + 0.1;
} else {
new_value = current_value - 0.1;
}
input.val(new_value);
});
});
小提琴:
答案 0 :(得分:1)
.toFixed(1)
将Number
转换为String
。
在字符串中添加数字时,该数字会隐式转换为字符串,从而将'0.1'
字符串添加到结尾。
减法对字符串不起作用,因此它的行为略有不同:字符串将被隐式转换为数字。
您希望在添加或减去后调用.toFixed
。
答案 1 :(得分:0)
你对这个'问题'的处理过于复杂,可以回到非常简单的代码中。首先更改数据方向的值。
<button data-direction="1">increase</button>
<button data-direction="-1">decrease</button>
如果您始终遵循以下规则:来自视图(html)的所有内容都是字符串,并且需要在进行任何计算之前进行投射,那么您始终是安全的。
您的javascript变为:
$(function() {
var button = $('button');
var curr_value = 1; // Set it to what you want your starting value to be
button.click(function() {
var button = $(this);
// direction is an integer now: 1 or -1
var direction = parseInt(button.data('direction'));
// Not 'safe' to directly parse it from the input,
// in case someone types in non numeric values.
// Do a check or - even better - make sure non-numeric values can't be
// entered.
var f = $('input');
// check here
var input = parseFloat(f); // input is a number here
// Set the new curr_value
curr_value = curr_value + (input * direction);
input.val(curr_value);
});
});
为了安全起见,我会建立检查输入的值等等......但是请留给你。希望它有所帮助...
答案 2 :(得分:0)
$(function() {
function decimal(number, boo){
number = parseFloat(number);
return +((boo) ? (number + 0.1):(number - 0.1)).toFixed(1);
}
var input = $('input');
$('button').click(function() {
var direction = $(this).data('direction');
var inputvalue = input.val();
input.val(decimal(inputvalue, direction=="increase"));
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button data-direction="increase">increase</button>
<button data-direction="decrease">decrease</button>
<input value="1.0" />