私は次のコードで作業しています:
<form id="myform">
<select name="myselect" id="myselect">
<option value="0">Default</option>
<option value="1">Option 1</option>
<option value="2" selected>Option 2</option>
<option value="3">Option 3</option>
</select>
<input type="submit" value="Go">
<input type="reset" class="reset" value="Reset form">
</form>
var $element = $('#myselect');
// Save current value of element
$element.data('oldVal', $element.val());
// Look for changes in the value
$element.on("change propertychange keyup input paste", function () {
// If value has changed... (selects don't play nice -- if they've changed they obviously have to have changed, though)
if ($element.data('oldVal') != $element.val() || $element.is('select')) {
console.log("Old Value:", $element.data('oldVal'));
console.log("new value:", $element.val());
// Updated stored value
$element.data('oldVal', $element.val());
}
});
ここに jsfiddle があります: http://jsfiddle.net/HzkN5/8/
これを IE8 で表示し、他の操作を行わずに [フォームのリセット] をクリックすると、一連のイベントがコンソール ログに記録されます。
選択の値がまったく変更されていないため、これは奇妙です。最新の Chrome や FireFox では発生しません。
私は不思議に思っていました - なぜ私は価値の変化を何度も見ているのですか? 実際の選択値の変更のみを検出する方法はありますか?