3

テキストボックスがあります

<input name="tx1" size="10" type="text" id="tx1" class="sample dynamic format" maxlength="10" />

テキストボックスの変更イベントとキーアップイベントは、2つの異なる関数にバインドされます。

$('.sample.dynamic').change(myJsFunction);


$('.format').keyup(function (e) {
        formatfn(this, e);

    });

これは私のformatfnです:

function formatfn(sValue, e) {

//Do some formatting

$(sValue).val(newVal);

return newVal;

}

IEとFirefoxではどちらのイベントも正常に機能しますが、Chromeではキーアップ機能のみが機能し、変更イベントは発生しません。

以下の行をformatfnでコメントすると、イベントの開始をchromeでも変更します。

//$(sValue).val(newVal);

しかし、キーを押すたびにフォーマットを適用する必要があるため、この行にコメントすることはできません。

ここここで2つの似たような質問を調べましたが、答えが見つかりませんでした。

更新:Formatfnはさまざまなフォーマット処理を行っていますが、newval変数についてのアイデアを提供するために、ここに関連するコードを追加しています。

var newVal = $(sValue).val();

if (newVal != "")
        newVal = parseInt(RemoveCommas(newVal), 10).toString();

    var sRegExp = new RegExp('(-?[0-9]+)([0-9]{3})');

    while (sRegExp.test(newVal)) {
        newVal = newVal.replace(sRegExp, '$1,$2');
4

3 に答える 3

4

ぼかしを使用すると、いつでも独自の変更関数をロールできます。

$('.sample.dynamic').data('last','').on('blur', function() {
    var last = $(this).data('last');
    if (this.value!=''&&this.value!=last) myJsFunction();
    $(this).data('last', this.value);
});
于 2012-10-25T22:51:56.573 に答える
2

これは、値がプログラムで変更されたときにonchangeイベントが発生しないことに関連するChromium開発サイトで報告された既存のバグと一致することに同意します。これらは、r36およびr37(カナリア)のリグレッション/バグとして確認されています。GoogleChromeについてのメニュー項目でバージョンを確認することをお勧めします。

キーアップ: https://code.google.com/p/chromium/issues/detail?id = 92492

変更:https ://code.google.com/p/chromium/issues/detail?id = 378871

簡単な回避策として、ハンドラーを変更ではなくぼかしで実行させることができます。これにより、前の回答で説明したように、onchangeイベントの失敗を回避できます。もう1つの例は、ぼかし時に変更イベントを明示的にトリガーすることです。

$('.sample.dynamic').on("blur", function(e){ 
     $(this).change();
});
于 2014-05-30T17:39:45.437 に答える
0

実際、Google Chromeにはバグがあり、「keyup」イベントによって何かが変更された場合に「change」イベントが発生しません。

https://code.google.com/p/chromium/issues/detail?id=92492

この問題は2013年5月2日から公開されているようです。

于 2014-01-10T11:18:25.557 に答える