2013-08-20 25 views
5

概要:のonchangeイベントは発生しません

は、私は時間の入力ボックスにテキストボックスを変換jQueryプラグインを書いています。これは、ユーザーが時間をHH:MM形式で入力できることを意味します。このプロセスの一部は、適切な場所にコロン(:)を挿入することです。 keyupでは、ユーザーが2つの数字を入力したかどうかを確認し、入力された値にコロンを追加します。

問題:

このアプローチは、誰かがテキストボックスにプラグインを適用する場合を除いて正常に動作しますが、また、ハンドラのonchange handler.Thisのonchange習慣を持って望んでいるコードは、プログラムでテキストボックスの値を更新したときに発生しませんもテキストボックスがフォーカスを失ったときに起動します。

私の理解:私が間違っている場合、私はここに推測している

ので、私を修正してください。

  • たぶん、テキストボックスには、編集を開始する前に、テキストボックスに 値を保持している内部"_value"(公開値属性から 区別するために強調)フィールドがあります。フォーカスが のtexboxのままになると、JSエンジンは、テキストボックス の現在の値がテキストボックスの"_value"と一致するかどうかをチェックします。異なる場合、 onchangeイベントが発生します。
  • 通常のネイティブキーストロークを使用して値を変更すると、 "_value"の値しか変更されないため、onchangeが有効になります。しかし、おそらく JSを介して行われた値の変更"_value"と の両方を変更するので、onchangeイベントは発生しませんか?

回避策:それは価値を持つには何も持っていないよう

ぼかしイベントが発生します。だから私は明示的にぼかしイベントから変更イベントを発生させることができます。しかし、私はハックであり、ぼかしと変更のセマンティクスを壊すので、これをしたくありません。

関連リンク:

私は同じ質問をSOにいくつかのリンクを見つけましたが、何の返事(私見)は、エレガントなまたは正しい解決策を与えません。

SIMPLIFIED CODE:

は、ここで私が見たものの一部です
$(document).ready(function() { 
    $("input").keyup(function() { 
     this.value = '*' + this.value; 
     // this changes the value, but does not fire the onchange event 
     // and it also does not fire it when the textbox loses focus. 
     // blur fires though. 
    }); 
    $("input").change(function() { 
     alert('in change'); 
    }); 

    $("input").blur(function() { 
     alert('in blur'); 
    }); 
}); 

FIDDLE:TESTED

http://jsfiddle.net/sajjansarkar/vHgst/4/

ブラウザ: IE8,10とChrome。 Firefoxで ワークス(!!)あなたがjquery.triggerでプログラムでイベントをトリガすることができます

+0

あなたは 'ele.valueを設定した場合、変更イベントが発生しません'は通常の動作です。参考までに、両方とも、入力が「フォーカスを失った」後にFirefoxで '変更 'イベントが発生します。 –

+0

@FelixKling通常の動作であれば、どのようにonchangeの動作を保持できますか?それがFFで動作するという興味深い観察は、質問を編集するでしょう –

答えて

1

(1フェリックスクリング): http://jsfiddle.net/vHgst/5/

$(this).trigger('change'); 
+0

はい、私はこれを正しい変更イベントを模倣すると呼びますか?あなたの例は、すべてのキーアップに対してonchangeを呼び出すでしょう –

関連する問題