2009-05-29 51 views
0

我有一個HTML表格,每一行都有一個用於選擇或取消選擇其行的複選框。每當複選框更改值時,我需要向該行添加或刪除突出顯示,並確保僅當至少選中一行並禁用其他行時才啓用頁面的提交按鈕。IE問題:鍵盤與複選框交互

複選框事件處理程序是由下面的函數定義:

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; 
    }; 
} 

其他地方在同一模塊中,該複選框被賦予的事件處理程序:

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

我在Windows XP中工作,並且在Firefox 3和Opera 9中都可以正常工作。但是,IE 7不能很好地處理鍵盤交互(鼠標交互工作正常)。

問題是,如果一個複選框有焦點,我打空格鍵,複選框不會被檢查 - 相反,它會得到一半檢查(它具有相同的陰影外觀,它會立即在mousedown後) 。我必須再次按空格鍵才能真正檢查框。同樣,它需要兩次按鍵來取消選中它。奇怪的是,如果我按住空格鍵一會兒,那麼一臺印刷機按預期工作。

任何人都可以解釋這裏發生了什麼?有什麼我在JavaScript代碼中導致這種行爲做錯了嗎?我怎樣才能解決這個問題?

回答

1

不幸的是,IE處理onchange與其他瀏覽器不同。 IE將其解釋爲「變更後模糊」。請注意,雖然這不是非常有用,但根據規範,在技術上是正確的:「onchange事件發生在控件失去輸入焦點並且其值自獲得焦點後已被修改」

您可以嘗試使用IE專用事件「onpropertychange」。

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

+0

但如何進行檢查該帳戶的事實,空格鍵印刷機不會導致該複選框? – 2009-05-29 19:17:07