jQuery:修改按键上的输入值

jQuery:修改按键上的输入值,jquery,replace,keypress,Jquery,Replace,Keypress,每当在我的输入类型=数字字段中键入点“.”时,我希望它被逗号“,”替换 $(box).find('input[type=number]').keypress(function(evt){ if(evt.which==46){ $(this).val($(this).val()+','); evt.preventDefault(); } }); 事件已被很好地激发,但字段将完全变为空。怎么了 编辑 我这么做的

每当在我的输入类型=数字字段中键入点“.”时,我希望它被逗号“,”替换

$(box).find('input[type=number]').keypress(function(evt){
        if(evt.which==46){
            $(this).val($(this).val()+',');
            evt.preventDefault();
        }
    });
事件已被很好地激发,但字段将完全变为空。怎么了

编辑


我这么做的原因是Chrome的最新版本,与HTML5的建议相反,在input type=number中使用逗号和放弃点。我目前只为Chrome开发,因为我暂时无法在其他地方测试我的应用程序。对此有何评论?我们是我的朋友,不知道为什么,似乎有用的钥匙码是190而不是110

尝试:

这是一个现场预览

查看钥匙代码,您可以尝试输入检查您需要的钥匙代码:
我们是我的朋友,不知道为什么,似乎有用的钥匙码是190而不是110

尝试:

这是一个现场预览

查看钥匙代码,您可以尝试输入检查您需要的钥匙代码:

您可以使用如下子字符串:

str.substring(0,str.length - 1) + ','

但是,这可能不是一个理想的解决方案。

您可以使用如下子字符串:

str.substring(0,str.length - 1) + ','

但是,这可能不是一个理想的解决方案。

您的代码在JSFIDLE上运行时似乎可以工作:

$(document).find('input').keypress(function(evt){ 
        if(evt.which==46){
            $(this).val($(this).val()+',');
            evt.preventDefault();
        }
    });​

您的代码在JSFIDLE上运行时似乎正常工作:

$(document).find('input').keypress(function(evt){ 
        if(evt.which==46){
            $(this).val($(this).val()+',');
            evt.preventDefault();
        }
    });​

可能您的文档尚未准备好:

jQuery(document).ready(function() {
  // your code
});

可能您的文档尚未准备好:

jQuery(document).ready(function() {
  // your code
});
如果您正在键入,并且始终希望在文本末尾添加“,”符号,则这可能会起作用。但是,如果你把光标放在文本的中间,然后按一个“?”符号,

怎么办?
如果您正在键入,并且始终希望在文本末尾添加“,”符号,则这可能会起作用。但是,如果你把光标放在文本的中间,然后按一个“.'符号?

< P>使字符替换在任何光标位置上工作,你就可以绑定到KEYUP事件并替换已经插入的字符。p>
$(document).on('keyup','.myField"]', function(e,i){
    if(e.keyCode==107)
    {
        var start = this.selectionStart,
            end = this.selectionEnd;
        $(this).val($(this).val().replace(/\+/,'|'));
        this.setSelectionRange(start, end);
    }
});

要使字符替换在任何光标位置工作,可以绑定到keyup事件并替换this.val中已插入的字符

$(document).on('keyup','.myField"]', function(e,i){
    if(e.keyCode==107)
    {
        var start = this.selectionStart,
            end = this.selectionEnd;
        $(this).val($(this).val().replace(/\+/,'|'));
        this.setSelectionRange(start, end);
    }
});

建议改用keyup事件。警报$this.val是否显示任何内容输入类型=数字将不接受逗号,。您可能需要更改输入类型=text@MuthuKumaran:实际上,这就是W3C关于type=number的说法,但Chrome恰恰相反,它只接受逗号,并删除点和后面的任何内容。这就是为什么我首先要这样做。@VisioN:keyup甚至不触发事件。建议改为使用keyup事件。警报$this.val是否显示任何内容Input type=number将不接受逗号,。您可能需要更改输入类型=text@MuthuKumaran:实际上,这就是W3C关于type=number的说法,但Chrome恰恰相反,它只接受逗号,并删除点和后面的任何内容。这就是为什么我首先要这么做。@VisioN:keyup甚至不触发事件。它适用于输入类型=文本,但OP使用的是输入类型=数字。它适用于输入类型=文本,但OP使用的是输入类型=数字。OP特别声明事件触发良好,但..OP特别声明事件触发良好,但是..我使用的是jQuery1.6,在上无法工作。更重要的是,对于keyup,evt.which匹配keycode而不是charcode。对于numpad dot,它将是110,而对于其他方式,它将是110,这取决于键盘映射。请立即尝试,然后我建议您更新jQuery vers。@pHCito现已修复,抱歉延迟;无论是否使用.keypress、.keypup、.keydown、.bindpress/up/down、.livepress/up/down。同样的行为。@pHCito您能告诉我您正在使用的jquery版本吗?你检查过JSFIDLE了吗?如果您想在文字输入中用逗号替换点,它会非常有效!!我正在使用jQuery1.6,在上无法工作。更重要的是,对于keyup,evt.which匹配keycode而不是charcode。对于numpad dot,它将是110,而对于其他方式,它将是110,这取决于键盘映射。请立即尝试,然后我建议您更新jQuery vers。@pHCito现已修复,抱歉延迟;无论是否使用.keypress、.keypup、.keydown、.bindpress/up/down、.livepress/up/down。同样的行为。@pHCito您能告诉我您正在使用的jquery版本吗?你检查过JSFIDLE了吗?如果您想在文字输入中用逗号替换点,它会非常有效!!找到解决方案:找到解决方案:这不起作用,因为如果输入无效,val在多个浏览器中不返回任何内容…这不起作用,因为如果输入无效,val在多个浏览器中不返回任何内容。。。