新小提琴:http://jsfiddle.net/martinnormark/jBZfs/14/ - 新的孤立示例。了解Amount 2如何触发更改事件! **
我有一个jQuery插件,用于在输入时格式化货币格式的数字。
你可以在这个小提琴中看到它:http://jsfiddle.net/martinnormark/Rv4Ug/1/
问题是,如果输入至少4位数的值(导致需要千位分隔符:1178变为1,178),则更改事件将终止。只要您保持低于4位数而不会导致新格式,就会触发更改事件。
在小提琴中,尝试输入12,然后输入123.你应该看到一个文字,上面写着“改变事件”。然后输入1234 - 并且不会触发更改事件。
这将与在keyup事件处理程序中操作input元素的值有关:
$this.on("keyup.autoformatcurrency", function(event) {
if ($.inArray(event.keyCode, keyCodes) > -1) {
formatCurrency($(this), true);
}
});
formatCurrency
函数:
function formatCurrency($this, setCaretPosition) {
var rawValue = $this.val(),
floatValue = Globalize.parseFloat(rawValue);
if ($.isNumeric(floatValue)) {
var formattedValue = Globalize.format(floatValue, settings.formatString),
caretPosition = 0;
if (setCaretPosition) {
caretPosition = $this.caret().end + (formattedValue.length - rawValue.length);
}
$this.val(formattedValue);
if (setCaretPosition) {
$this.caret(caretPosition, caretPosition);
}
}
}
(完整来源,请参阅Github上的文件:https://github.com/martinnormark/jquery-format-currency/blob/master/src/jquery.formatcurrency.js)
问题是,如果有办法确保更改事件会被触发?
更新 - 浏览器中的当前状态
Chrome :如果数字低于4位,则更改事件
Safari,IE :只要以编程方式设置值,就不会触发更改事件。输入字母而不是数字将触发更改事件
Firefox :正常工作!
Opera :有效!
答案 0 :(得分:1)
最简单的方法是从keyup函数中触发change事件:
$this.on("keyup.autoformatcurrency", function(event) {
if ($.inArray(event.keyCode, keyCodes) > -1) {
formatCurrency($(this), true);
$(this).change();
}
});