用点字符替换逗号

时间:2014-08-17 19:05:12

标签: javascript jquery appjs

我在AppJs中制作了一个计算应用程序。

基本上它是一堆:

 <input type=number> 

字段。

为了使它更加用户友好我认为我应该用点替换所有逗号,以便javascript可以使用实际值来计算。

我尝试过以下代码:

$("input[type=number]").keyup(function(e){
        var key = e.which ? e.which : event.keyCode;
        if(key == 110 || key == 188){
          e.preventDefault();
          var value = $(this).val();         
          $(this).val(value.replace(",","."));
        }   
});

在资源管理器9中,这可以按预期工作:see fiddle

但是,由于App.js使用铬,我猜这是铬中发生的事情。我该如何解决这个问题?

这是我的应用中发生的事情: 输入包含逗号字符的数字时。逗号字符向右移动,当输入框失去焦点时,将删除逗号(可能是因为type = number中不允许使用逗号字符)

3 个答案:

答案 0 :(得分:6)

当您获得<input type=number>的值但它无效时,则返回空白字符串。你可以这样做:

$("input[type=number]").keyup(function(e){
        var key = e.which ? e.which : event.keyCode;
        if(key == 110 || key == 188){
          e.preventDefault();
          var value = $(this).val(); 
          console.log(value === "");        
          $(this).val(value.replace(",","."));
        }   
});

每次都会打印true。因此,您需要

  1. 由于在keyup事件中输入已更改,因此您必须将其更改为keydownkeypress事件。

  2. value.replace(",", ".")更改为value + "."(因为没有",")。

  3. 实际上,您需要将其插入光标所在的位置。我有空的时候会更新。
  4. 完成的代码:

    $("input[type=number]").keydown(function (e) {
        var key = e.which ? e.which : event.keyCode;
        if (key == 110 || key == 188) {
            e.preventDefault();
            var value = $(this).val();
            console.log(value);
            $(this).val(value + ".");
        }
    });
    

    更好的想法可能是让它<input type=text>并在需要此功能时手动验证。

答案 1 :(得分:1)

最好不要混淆输入字段中的实际数据,而是在读取之前在内部重新格式化,通过这样的getter访问值:

var getInputNumber = function(inputid) {
    return $(inputid).val().replace(",", ".");
};

答案 2 :(得分:0)

        $("input").keydown(function (e) {
            var key = e.which ? e.which : event.keyCode;
            if (key == 110 || key == 188) {
                var value = $(this).val();
                if (!isNaN(value)) {
                    e.preventDefault();
                    $(this).val(value + ".");
                }
            }
        });