【发布时间】:2015-06-14 02:00:48
【问题描述】:
我有以下代码可以简单地更改数字值:
//zoom select
var zoom = 1;
$('select#zoom').change(function(e) {
zoom = $(this).val();
console.log('zooming to: ', Math.floor(zoom*100), '%');
});
//zoom incremental
$(document).keypress(function(e) {
//out
if(e.keyCode == 45){
if (zoom > 0) zoom = parseInt(zoom,10) - 0.1;
$('select#zoom').val(zoom);
console.log('zooming to: ', Math.floor(zoom*100), '%');
console.log('Type:',typeof zoom,' ',toString(zoom)); //*flag
}
//in
if(e.keyCode == 43){
if (zoom < 2) zoom = parseInt(zoom,10) + 0.1;
$('select#zoom').val(zoom);
console.log('zooming to: ', Math.floor(zoom*100), '%');
console.log('Type:',typeof zoom,' ',toString(zoom)); //*flag
}
});
当 keypress 事件触发时,它的行为与预期一样,但是如果我从使用 select 元素开始,然后按一个键来更改值,则输出如下所示:
缩放到:50%
缩放到:NaN%
类型:数字[对象窗口]
HTML:
<select id="zoom">
<option value="2">200%</option>
<option value="1.5">150%</option>
<option value="1.25">125%</option>
<option value="1" selected>100%</option>
<option value=".75">75%</option>
<option value=".5">50%</option>
<option value=".25">25%</option>
</select>
这让我发疯了。有什么想法吗?
提前致谢。
【问题讨论】:
-
似乎这一行是问题开始的地方
zoom = $(this).val();。你应该确保它是一个数字。 -
我尝试过使用
zoom = parseInt($(this).val(), 10);,但奇怪的是它丢失了值,即可能将其转换为 undefined 或 null。 -
zoom = $(this).val();保存一个字符串,您需要将其转换为正确类型的数字 - 当然最好首先将其保存为数字(触发 onchange 时),所以您不必一遍又一遍地转换它。有关更多信息,请参阅我的回答。 -
@JanLegner 做到了!你是个聪明人。助教
标签: javascript jquery types numbers typeof