2012-05-07 9 views
2

どのように(javascriptまたはjQueryを使用して)、以前に選択されたものと同じオプションであっても(つまり変更イベントは発生しない)、選択ボックスから値が選択されたときを検出できます。選択ボックスとのやりとりの検出

主に私はマウスの摂動のためにこれを必要としますが、キーボードでも機能するソリューションは便利です。

+0

チャンスはあなたはそれが間違った方法であるものは何でもについて移動しようとしているということです。なぜあなたはこの行動をしたいのですか?個人的には、私はブラウザの動作を変更することに反対します。 –

+1

@Tyler Crompton私は、バックボーンによって作成されたテーブルにいくつかの行を持ち、いくつかの列には値を変更して表示する選択ボックスがあります。ユーザーが最後に録音した時間のタイムスタンプを保存したいのですが、変更を行わないような対話も記録することが重要です。基本的には、私の目的のために、価値を評価し検討するユーザーは、実際に価値を変えるほど重要です。 – wheresrhys

答えて

0

では動作しません。マークアップでは、1つの追加オプション(最初の子)を作成し、非表示にしました(通常のChrome/FF/Safari、IEでは完全に非表示にします)。それでいいよ。 jQueryのを使用して次に

<select> 
    <option style="display: none"></option> 
    <option>First</option> 
    <option>Second</option> 
    <option>Third</option> 
</select>​ 

我々は隠されたオプションの値にその値をリセットしselectmousedownトリガ、という方法でchangemousedownイベントをバインド。

$("select").on({ 
    change: function() { 
     console.log($(this).val()); 
    }, 
    mousedown: function() { 
     $(this).val($(":first", this).val()); 
    } 
});​ 

DEMO:http://jsfiddle.net/LzNrS/

UPDATE:ユーザーがselectをクリックしますが、何も選択しないことを決定した選択された値を維持するためには、我々は少しblurイベントを追加し、コードを変更することができますmousedownを更新します。

var special = ""; // special hidden option value 
var value = ""; // temporary variable 

$("select").on({ 
    change: function() { 
     console.log($(this).val()); 
    }, 
    mousedown: function() { 
     if (this.value == special) { 
      $(this).val(value); 
      return; 
     } 
     value = this.value; 
     $(this).val(special); 
    }, 
    blur: function() { 
     if (this.value == special) 
      $(this).val(value); 
    } 
});​ 

DEMO:http://jsfiddle.net/LzNrS/1/

+0

また、よくできました。 –

+0

すてきな解決策。最終的には、まったく簡単な解決策がないように、私は隣のラベルに現在の値を表示し、select値をこの値に変更してから、デフォルトのオプションにリセットすることで問題を回避することにしました。イベント。 – wheresrhys

+0

@ wheresrhysそれは是非とも動作するはずです:) – VisioN

0

イベントハンドラを選択ボックスのオプション要素にアタッチし、その値を保存する場合は、頭の上から機能するかどうかはわかりません。マウスで

作品は、私が実行可能見つけた唯一の解決策はmousedown上のいくつかの他にselectの値を設定することにより、changeイベントを引き起こすことがあるキーボードhttp://jsfiddle.net/w4DEJ/4/

+0

どのブラウザをお使いですか?私の側で働いていない..私はクロムを使用しています.. –

+0

は、firefoxで働く12 – slash197

+0

クロムでは機能しないが、IEでは確認できます – slash197

関連する問題