【问题标题】:JQuery Code works in Firefox, Opera but not working in Chrome and IEJQuery 代码适用于 Firefox、Opera 但不适用于 Chrome 和 IE
【发布时间】:2013-04-09 12:11:34
【问题描述】:

我有以下代码在 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 link。 (正如我所说,如果我在 Firefox 或 Opera 中打开此链接,则 js 可以工作,但不能在 Chrome 或 IE 中工作)。控制台上也没有js错误。我需要针对 Chrome 和 IE 做一些特定的事情吗?

编辑

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

【问题讨论】:

  • 我在 OS X 上使用 Chrome 26.0.1410.43,我看到逗号就像在 Firefox 中一样。他们应该看起来像这样:12,34,56,789 吗? (对不起,我不熟悉印度逗号)
  • 对不起,如果我不清楚。深夜让我有点迷茫。是的,逗号将出现在您的示例中。问题是 onChange 事件在 Chrome 和 IE 中没有触发。

标签: javascript jquery cross-browser


【解决方案1】:

我在 Chrome 上进行了测试,逗号没有问题,但我从未看到 underConstArea 更新,而我在离开文本框后在 Firefox 上确实看到了它。

我不确定那里发生了什么,但我有几种解决方法。

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

如果您对 underConstArea 仅在号码完成后更新(就像它在 Firefox 中的行为一样)感到满意,您可以在 focusout 上而不是在 change 上这样做。我将您的顶行更改为

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

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

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

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

在函数的底部。 link 是我提供的第二个选项。请注意,我删除了#readyArea 上的所有事件。

【讨论】:

  • 添加 $(this).trigger('change'); 使 onChange 在 Chrome 中也能正常工作。演示小提琴 jsfiddle.net/46brx/7/。然而,在我的页面上,我将focusout 方法与手动触发onchange$(this).trigger('change'); 结合使用。但是我仍然无法弄清楚为什么 Chrome 会这样。 – 史努比 37 秒前编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 2013-04-22
  • 2013-07-01
  • 2013-11-10
  • 2018-12-13
  • 1970-01-01
  • 2015-07-11
相关资源
最近更新 更多