14

選択ドロップダウンのあるフォームを作成しています。オプションの 1 つは「その他 - 指定してください」です。これは、詳細について追加のテキスト フィールドを表示することになっています。

私はonChangeイベント+いくつかの簡単な値チェックを使用してそれを行うことができました(位置に依存できないため)。

私はそれをテストし始め、マウスを使用するときは完全に機能しますが(コントロールがフォーカスを失った後にonChangeが実行されます)、キーボードを使用するときは機能しません(まだフォーカスを失っていないため)-押した後のみタブに変更が表示されますか (奇妙に見えます)。

明らかな何かが欠けているように思えます。他のイベントを探しましたが、見つかった最も近いものは onclick ですが、それもそうではありません。

問題は、これを解決するより良い方法はありますか?

4

5 に答える 5

10

<select>これをタグに追加するだけです:

onkeyup="this.onchange();"
于 2010-11-30T11:51:32.943 に答える
3

onkeyup="this.onchange(); ただし、変更がない場合は keyup イベントが発生する可能性があります

于 2012-01-06T14:32:44.760 に答える
2

この記事が役立つかもしれません。次のようなトリックを使用します。

// executes an onchange function after 750ms (or specified delay)
function safeOnChange1( code, delay ) {
  delay = delay || 750;
  window.clearTimeout( soc_id );
  soc_id = window.setTimeout( code, delay );
} 
// global timer ID for the safeOnChange1 function.
var soc_id = null;

きれいではありませんが、それがドロップダウンで onchange 関数を使用する際の問題です。もう1つの解決策は、ドロップダウンの値を時々チェックし、変更された場合は onchange 関数を呼び出す関数です。

次のようなチュートリアルを参照してください: http://onlinetools.org/articles/unobtrusivejavascript/chapter4.html

function addEvent(obj, evType, fn){ 
 if (obj.addEventListener){ 
   obj.addEventListener(evType, fn, false); 
   return true; 
 } else if (obj.attachEvent){ 
   var r = obj.attachEvent("on"+evType, fn); 
   return r; 
 } else { 
   return false; 
 } 
}
addEvent(window, 'load', foo);
addEvent(window, 'load', bar);

調べることができればjqueryの方法もあります

于 2009-09-02T15:50:06.013 に答える