2009-05-29 7 views
0

私はHTMLテーブルを持っており、各行にはその行を選択または選択解除するためのチェックボックスがあります。チェックボックスの値が変わるたびに、行にハイライトを追加または削除する必要があります。また、少なくとも1つの行が選択されている場合はページの送信ボタンが有効になっていることを確認してください。IEの問題:キーボードとチェックボックスのやりとり

チェックボックスのイベントハンドラは、次の関数によって定義されます。

checkbox.onchange = getCheckboxCallback(); 
checkbox.onclick = getCheckboxCallback(); // alleged IE fix 

私はWindows XPで働いている:他の場所で同じモジュールで

function getCheckboxCallback() { 
    return function() { 
    var parentRow = getParentRow(this); 
    if (!parentRow) { 
     return; // No parent row found; abort 
    } 

    // Adjust the appearance of the row 
    setSelected(parentRow, this.checked); 

    // Count the number of selected table rows, and disable the submit 
    // button whenever no rows are selected 
    enforceInvariants(); 

    return true; 
    }; 
} 

、チェックボックスは、イベントハンドラを与えていますFirefox 3とOpera 9の両方でうまく動作します。しかし、IE 7はキーボードのやりとりをうまく処理しません(マウスのやりとりはうまく動作します)。

問題は、チェックボックスにフォーカスがあってスペースバーにヒットした場合、チェックボックスがチェックされず、代わりにハーフチェック(マウスの直後に表示されるのと同じ影付きの外観) 。私は実際にボックスをチェックするためにスペースバーをもう一度押す必要があります。同様に、チェックを外すには2つのキーを押す必要があります。奇妙なことに、私がスペースバーを数分間押せば、1回のプレスが期待通りに機能します。

誰でもここで何が起こっているのか説明できますか?この動作を引き起こしているJavaScriptコードで何か間違っていることはありますか?これをどうすれば解決できますか?

答えて

1

残念ながら、IEは他のブラウザとは違ってonchangeを扱います。 IEは「変更後のぼかし」を意味すると解釈します。これは非常に有用ではありませんが、仕様に応じて技術的に正しいことに注意してください: "コントロールが入力フォーカスを失ってその値がフォーカスを獲得してから変更されたときにonchangeイベントが発生する"

IEのみのイベント "onpropertychange"。

参考:http://lhorie.blogspot.com/2007/04/fixing-ie7-onchange-bug-on-checkboxes.html

+0

しかし、どのようにスペースキーを押すには、チェックボックスをチェックする原因とされていないという事実のために、そのアカウントのでしょうか? –

+0

私はその動作を説明することはできません。チェックボックスにkeydownイベントを追加し、デバッガを使用して動作を調べたり、keydownイベントを使用してスペースバーのプレス(event.keyCode === 32)をチェックしたりすることができます。 – BarelyFitz

関連する問題