Javascript 在数字输入中输入文本不会';不触发变更事件?

Javascript 在数字输入中输入文本不会';不触发变更事件?,javascript,jquery,html,Javascript,Jquery,Html,在中输入文本似乎不会触发更改事件。我想要一个更改事件,这样我可以警告用户修复他们的输入。我如何获取此更改事件,并获取当前值,以便验证错误输入 我一直在测试Chrome $('input')。在('change',function()上{ 警报(“变更”); }); 在me中输入字母,然后按tab:尝试使用其他键盘事件。例如,我刚刚添加了 $("input").on('keyup', function() { alert('keyup' + $(this).val()); }) 对于

中输入文本似乎不会触发更改事件。我想要一个更改事件,这样我可以警告用户修复他们的输入。我如何获取此更改事件,并获取当前值,以便验证错误输入

我一直在测试Chrome

$('input')。在('change',function()上{
警报(“变更”);
});


在me中输入字母,然后按tab:
尝试使用其他键盘事件。例如,我刚刚添加了

$("input").on('keyup', function() {
    alert('keyup' + $(this).val());
})
对于您的JSFIDLE示例,在按下
number
文本框中的
a
后会出现
警报

注意:选中
$(this).val()
不会返回无效字符(至少在Chrome中是如此)。它在返回结果之前去除无效值(例如,
1a
变为空白)。这也是为什么
change
事件在其值没有实际更改时似乎没有被激发的原因,因为输入都是无效的。要捕获无效字符,必须检查事件的
keyCode

$("input").on('keyup', function(e) {
    if (e.keyCode < 48 || e.keyCode > 57) {
        // not 0-9 (note: ignores -)
        alert('error!');
    }
});
JavaScript

function checkValid(e) {
    var $this = $(this);
    $("#event").text(e.type);
    $("#text").html("this.value: " +
                    this.value +
                    "<br />$(this).val(): " +
                    $this.val() + "<br />$(this).is(:valid): " +
                    $this.is(":valid") +
                    "<br />$.isNumeric(this.value): " +
                    $.isNumeric(this.value)); // <- helps check
}

$('input[type="number"]').on('change', checkValid).on("keyup", checkValid);
功能检查有效(e){
var$this=$(this);
$(“#事件”).text(e.type);
$(“#text”).html(“this.value:+
这就是价值+
“
$(this.val():”+ $this.val()+“
$(this.is::有效):”+ $this.is(“:valid”)+ “
$.isNumeric(此.value):”+
$.isNumeric(this.value));//事件更改在失去焦点时触发,并且它按预期工作,您可能需要使用
keyup

$('input').on('keyup', function() {
    alert('change');
});
如前所述,如果用户在
元素中键入“abcd”,则无法通过
$(this.val()
)获取值
'abcd'
(注意:我只在Chrome中测试过。)

但是,您可以通过调用
mydoelement.checkValidity()
,或查看
mydoelement.validity
对象的各个属性来确定HTML5输入有效性约束是否满足(有效)。这至少可以让您区分空白字段(有效)还有一个包含“abcd”(无效)。请查看有关HTML5有效性的更多信息

至少在Chrome中,相当令人困惑的是,如果一个
元素最初是空的,然后您键入“abcd”,则
'change'
事件是而不是在模糊时触发的。同样,当您从字段中删除“abcd”时,该字段变为空


一个解决方法是测试HTML5在模糊上的有效性。这里有一个例子来说明这项技术。请注意,您仍然无法判断用户是否已将“abcd”更改为“efgh”,因为这两个都无效。

在Chrome上会触发一个事件,但只有在您按下其中一个箭头并键入另一个箭头后才会触发东西。我在Firefox中得到了这个事件……但我不知道他们是否支持
type=number
输入。我没有得到任何箭头。更改是在模糊时触发的text@Musa:
blur
在正确的时间触发,但如何获取值?
此值返回一个空字符串。我希望可以同时触发它onchange会。也许
blur
更合适。如果Chrome不允许您在框中键入非数字,这种行为就可以了。但即使检查键代码,也很难判断是否有“文本”在框中。我们如何确定他们何时清除了坏字符?我们是否必须计算他们键入的键数,并将其与多少退格(这将是完全不可靠的)匹配?中的注释:“如果元素的值不是有效的浮点数,则改为将其设置为空字符串。”
$('input').on('keyup', function() {
    alert('change');
});