每当输入字段的值发生变化时,我都会尝试触发一个函数。输入字段位于灯箱中,因此我必须委托事件:
var validateDonation = function(elem) {
var msg,
value = elem.value;
if (value == '') { msg = 'Please enter an amount'; }
else if(parseInt(value, 10) < 1) { msg = 'Please enter an amount greater than 1'; }
else if(parseInt(value, 10) > 100) { msg = 'Please enter an amount less than 100'; }
else { msg = ''; }
if(msg != '') {
console.log(msg);
}
}
和
$('body').delegate('#donation_amount', 'change', function(event) {
validateDonation(this);
});
如果我使用keyup
而不是change
,则控制台日志可以正常运行。但不是改变。为什么呢?
答案 0 :(得分:1)
https://msdn.microsoft.com/en-us/library/ms536912(v=vs.85).aspx
onchange:在提交内容时触发此事件,而不是在值更改时触发此事件。例如,在文本框中,在用户键入时不会触发此事件,而是在用户通过保留具有焦点的文本框提交更改时触发。此外,当控件也失去焦点时,此事件在onblur指定的代码之前执行。
如果您希望立即更新更改,那么您可能希望使用 oninput 事件
oninput:当<input>
或<textarea>
元素的值发生更改时,将同步触发DOM输入事件。此外,当内容发生变化时,它会触发可信的编辑器。
对于低于IE9的IE,我认为你需要使用onpropertychange事件和oninput以适应现代浏览器。
这是一个向您展示事件立即触发的小提琴
http://jsfiddle.net/SeanWessell/9jfkcapp/
试试这个......
$('body').delegate('#donation_amount', 'input propertychange', function (event) {
validateDonation(this);
});