web-dev-qa-db-ja.com

プログラムでテキストボックスの値を変更して、JavaScriptのonchangeイベントを呼び出す

私が直面している問題はこれです:

  • カレンダーコントロールの横に日付範囲のテキストボックスがあります。
  • ユーザーがカレンダーから日付を選択すると、その日付がテキストボックスに入力されます
  • これが発生したときにJavaScript関数を起動したいのですが、「onchange」イベントが発生していないようです。

イベントを属性としてテキストボックスに追加できるようにしたいのですが、次のようになります。

txtCreateDate.Attributes.Add("onchange", string.Format("JSfunction({0},'{1}');", arg1, arg2));

詳細:日付はc#のテキストボックスに入力されます。カレンダーコントロールのページにイベントハンドラがあります。日付が選択されると、イベントハンドラーは日付をテキストボックスに入力します。この時点でフォーカスをテキストボックスに設定してから、テキストボックスにonBlur属性を設定しようとしましたが、テキストボックスにフォーカスが移動したようには見えません。

この時点で、JavaScript関数を直接呼び出してClientScript.RegisterClientScriptBlockなどを実行できると思いますが、それはだらしのないようで、期待どおりに機能しません。

11
matthew_360

テキスト領域に適用されたときにonchangeイベントが何をするかを誤って解釈しています。フォーカスを失うか、Enterキーを押すまで起動しません。テキスト領域を埋めるselectのonchangeから関数を起動しませんか?

Onchangeイベントの詳細については、こちらをご覧ください: w3schools

8
jacobangel

これは古い質問であり、役立つかどうかはわかりませんが、プログラムを使用してイベントを発生させることができました。

if (document.createEvent && ctrl.dispatchEvent) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", true, true);
    ctrl.dispatchEvent(evt); // for DOM-compliant browsers
} else if (ctrl.fireEvent) {
    ctrl.fireEvent("onchange"); // for IE
}
19
palswim

あなたは単純にイベントを発生させることができます

 document.getElementById( "elementID")。onchange(); 

これが一部のブラウザで機能しないかどうかはわかりませんが、FF 3とIE 7+では機能するはずです。

8
SvenFinke

Onchangeは、ユーザーがキーボードで何かを入力したときにのみ発生します。 可能回避策は、最初にテキストフィールドにフォーカスしてから変更することです。

しかし、ユーザーが日付をクリックしたときにイベントをフェッチしないのはなぜですか?すでにいくつかのJavaScriptが必要です。

2
TheHippo

人口はサーバー側からです。 registerclientscriptを使用すると、スクリプトがフォームの先頭に配置されます。RegisterStartupScript(Block)を使用して、問題のページの最後にスクリプトを配置する必要があります。

前者は、DOMにテキスト領域が存在する前にスクリプトを実行しようとします。後者は、ページ内のその要素が作成された後にスクリプトを実行します。

1
Tracker1

Anthemライブラリ を試すことができます。

1

別のクラスに入れて、関数を呼び出すことができます。これはajaxリフレッシュ時に機能します

$(document).on("change", ".inputQty", function(e) {

//Call a function(input,input);
});
0
Nicook