2013-04-11 4 views
5

このオプションが既に選択されているかどうかにかかわらず、ユーザーがHTML selectボックスでオプションを選択したときにJavaScript関数を実行する方法を見つけようとしています。だからonchangeは問題になりません。選択中のonblur/onchangeの代わりに

onblurの問題は、少なくともChromeとSafariでは、ユーザーが別の要素をクリックするまでイベントが発生しないことです。また、ユーザーが選択に集中してからオプションを選択せず​​にクリックすると、イベントがトリガーされないようにすることができます。

各オプションにonmouseupハンドラを付けることで成功を収めましたが、これはFirefoxでのみ動作します。何か案は?

+0

んを使用してみてくださいonclick'の仕事ですか? – Barmar

+0

@Barmar - いいえ、Firefoxだけが 'option'要素のクリックイベントをサポートしていると思います。私はIEでこれをテストしていないことを言及します。 –

+1

'onfocus'のたびに' selectedIndex = -1'を作るのは醜い解決策です。 'onchange'を安全に聞くことができます。これはキーボードユーザーにとって迷惑なことですが、クライアントが以前に選択したものを気にしないと仮定した場合、これはテストに値するかもしれません。 – Passerby

答えて

2

誰もこれに答えるために気にしていないので、私は私のコードのジェネリック版を投稿します:

<select id="mySelect" onfocus="this.selectedIndex=0;" onchange="userDidSomething(event)"> 
    <option>Choose one:</option> 
    <option>Option 1</option> 
    <option>Option 2</option> 
</select> 

はJavaScript:

function userDidSomething(event) { 
    // Your Code Here. 
} 
+0

JavaScriptがオンになっていないと、ブラウザの読み込みが停止します。私はあなたがこのようにonChangeを使うことができると思います: '' 'var s = document.getElementById(" mySelect "); s.attachEvent( "onchange"、function(){ // function here }); '' ' –

1

は `

var s = document.getElementById("mySelect"); 
s.attachEvent("onchange", function() { 
    // function here 
}); 
+3

彼は言った、彼は' onchange'を望まない。 –

+0

私の謝罪。イベントリスナーは可能ではありませんか?問題が古いInternet Explorerの場合はおそらくそうではありません。 – jonlastthelast