2010-09-14 109 views
5

我使用的是以下小工具 http://www.erichynds.com/examples/jquery-ui-multiselect-widget/demos/ 它迄今爲止效果很好,但我需要一些幫助來添加屬性。在使用Firebug時,我注意到只需單擊複選框,選中的屬性就不會像我期望的那樣出現。在我的代碼中,我修改了這個小部件,我已經能夠添加代碼來刪除checked的屬性。通過jQuery添加選中的屬性

this.removeAttribute(\'checked\'); this.checked=false; 

如果事先被檢查過。我已成功使用此代碼

this.setAttribute(\'checked\', \'checked\'); this.checked=true; 

如果該項目在頁面加載時未選中。

,當我需要能夠利用上的複選框兩套代碼我的問題來了,我已經嘗試以下

onclick="if($(this).attr(\'checked\') == \'true\') { this.setAttribute(\'checked\', \'checked\'); this.checked=true; } else { this.removeAttribute(\'checked\'); this.checked=false; } 

如果事先選中的代碼將刪除的檢查(屬性頁面加載時),但是當我嘗試點擊複選框添加屬性(如果未在頁面加載時檢查),則不會發生任何事情。

感謝您的任何幫助,併爲我糟糕的編碼感到遺憾。

+0

由於球員。原因是我試圖在optgroup頭上執行toggle()事件。當用戶點擊它時,它會摺疊與其關聯的部分,但是,它會顯示被檢查的項目。如果您不檢查/取消選中項目,則可以來回切換事件。我遇到的問題是,如果你有一個在頁面加載時被檢查的項目,toggle()將工作。如果取消選中它,那麼toggle()不適用於該項目,因爲我正在查看checked屬性。有沒有另一種方法來做到這一點? – Chris 2010-09-14 17:10:43

+0

您無需轉義用雙引號包裹的單引號 – RobertPitt 2010-09-14 17:54:49

回答

1

在使用Firebug時,我注意到只需單擊複選框,選中的屬性就不會像我期望的那樣出現。

爲什麼你需要checked屬性呢? checked屬性提供了您通常需要的所有功能,即檢查該框將將element.checked設置爲true,反之亦然,即修改element.checked將更改框的狀態。

+0

我最終使用checked屬性切換顯示/隱藏效果的optgroup。如果代碼發現在切換事件觸發時檢查了某個項目,則顯示已檢查的項目(如果未隱藏它們)。有沒有另外一種方法來完成這個目標? – Chris 2010-09-14 16:59:34

+0

你只需要使用元素的'checked'屬性,例如。 '$( '#標識')[0] .checked' – casablanca 2010-09-14 21:01:03

2

我注意到,只需點擊複選框選中的屬性不會出現

這是完全正確的。 checked屬性不對對應於當前輸入的檢查;它實際上對應於HTML文檔中的初始檢查,如果表單被重置,則檢查將被恢復。

IE添加屬性是因爲IE錯誤。 getAttribute/setAttribute在IE中被破壞 - 從不在HTML文檔中使用它們! - 它們實際上設置了屬性,而不是屬性。

這是defaultChecked財產。但爲什麼你要設置checked屬性?幾乎從來沒有一個很好的理由。通常,簡單的舊checked屬性就是你要找的東西。

14

在jQuery中除去的屬性使用

this.removeAttr('checked'); 

和用於設置一個屬性使用

this.attr('checked', 'checked');