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 が変更イベントをスローしないようです。変更の無限ループを回避しようとしているのかもしれません。よくわかりません。

番号が完了したときにのみ更新することに満足している場合(Firefox で動作するため)、 onの代わりに on をunderConstArea実行できます。トップラインを次のように変更しましたfocusoutchange

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

ChromeとFirefoxでうまくいきました。 ここに更新されたフィドルがあります。

または、ユーザーが入力するたびに更新する場合はunderConstArea、関数内で更新するだけcommaFormattedです。追加するだけ

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

関数の一番下にあります。そして、私が提供した2番目のオプションへのリンク。でキャッチするイベントをすべて削除したことに注意してください#readyArea

于 2013-04-08T19:26:58.710 に答える