簡體   English   中英

在keyup中設置輸入值,停止觸發更改事件

[英]Set input value in keyup, stops change event from firing

新小提琴: 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 :只要以編程方式設置值,就不會觸發Change事件。 輸入字母而不是數字將觸發更改事件。
Firefox :有效!
歌劇 :工作!

最簡單的方法是,從keyup函數中觸發change事件:

$this.on("keyup.autoformatcurrency", function(event) {
    if ($.inArray(event.keyCode, keyCodes) > -1) {
        formatCurrency($(this), true);
        $(this).change();
    }
}); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM