1

我有以下代码适用于 Firefox-20 和 Opera,但不适用于 Chrome-26 或 IE-10。keyup 函数将印度逗号添加到金额中。

$(document).ready(function() {
    $("#readyArea").on('change', function() {
        $("#underConstArea").val($(this).val()).trigger('change');
    });

$('.comma').on('keyup', this, function commaFormatted(){
        var delimiter = ","; // replace comma if desired
        var amount = $(this).val().replace(/\,/g,'');
        var a = amount.split('.',2);
        var d = a[1];
        var i = parseInt(a[0],10);
        if(isNaN(i)) { return ''; }
        var minus = '';
        if(i < 0) { minus = '-'; }
        i = Math.abs(i);
        var n = new String(i);
        var a = [];
        var cnt=0;
        while(n.length > 2)
        {
            if(cnt == 0)
            {
                var nn = n.substr(n.length-3);
                n = n.substr(0,n.length-3);
                cnt++;
            }
            else
            {
                var nn = n.substr(n.length-2);
                n = n.substr(0,n.length-2);
            }
            a.unshift(nn);
        }
        if(n.length > 0)
        {
            a.unshift(n);
        }
        n = a.join(delimiter);
        amount = n;
        amount = minus + amount;
        $(this).val(amount);
    });
});

这是 JSFiddle链接。(正如我所说,如果我在 Firefox 或 Opera 中打开此链接,则 js 可以工作,但不能在 Chrome 或 IE 中工作)。控制台上也没有js错误。我需要为 Chrome 和 IE 做一些特定的事情吗?

编辑

澄清一下,在 Chrome 和 IE 中没有触发的是 onChange 事件。Firefox 和 Opera 也是如此。

4

1 回答 1

1

我在 Chrome 上进行了测试,逗号做得很好,但我从未看到underConstArea更新,而在离开文本框后,我确实在 Firefox 上看到了更新。

我不确定那里发生了什么,但我有几种修复它的方法。

首先,似乎$("#readyArea").on('change')火灾是否取决于浏览器。我不知道为什么,但是当您更改代码时,Chrome 似乎不会引发更改事件。也许它是在试图避免无限循环的变化;我不太确定。

如果您对数字完成后的唯一更新感到满意underConstArea(因为它在 Firefox 中的行为),您可以这样做 onfocusout而不是 on change。我将您的顶行更改为

$("#readyArea").on('focusout', function() {
    $("#underConstArea").val($(this).val());
});

它在 Chrome 和 Firefox 中对我来说效果很好。 是一个更新的小提琴。

或者,如果您希望它在每次用户键入时更新,只需underConstArea在您的commaFormatted函数中更新。只需添加

$("#underConstArea").val(amount);

在你的功能的底部。以及我提供的第二个选项的链接。请注意,我删除了所有在#readyArea.

于 2013-04-08T19:26:58.710 回答