2011-10-11 52 views
0

我幫助如果單擊Yes或No,你會看到它打破,使一個未經檢查的行強調人解決他們的普通的JavaScript亮點,當覈對問題與.checked

DEMO

我知道我可以在jQuery的改寫,但我真的想知道是什麼使得它無法

感謝

回答

3

這是因爲你要添加每次類名。因此,如果您在5次之間切換,item3將具有類名radio-item myclass myclass myclass myclass myclass。因此,在您replace你需要確保它是全球(替換搜索字符串的每一次出現)

編輯:

該代碼添加類名而不檢查它是否在那兒擺在首位。請記住,您正在循環使用所有複選框,對其中的任何更改都進行了更改。

if (inputArray[i].checked) { 
    inputArray[i].parentNode.className += " myclass"; 
}  
+0

權。我看到了。謝謝 – mplungjan

+0

@mplungjan我編輯了我的答案,告訴你這個代碼搞亂了。 – peirix

+0

是的,我也找到了。謝謝 – mplungjan

1

這裏的一些庫函數,我前段時間寫的:

function trim(s) { 
    return s.replace(/(^\s+)|(\s+$)/g,'').replace(/\s+/g,' '); 
} 

function hasClassName(el, cName) { 
    if (typeof el == 'string') el = document.getElementById(el); 

    var re = new RegExp('(^|\\s+)' + cName + '(\\s+|$)'); 
    return el && re.test(el.className); 
} 

function addClassName(el, cName) { 

    if (typeof el == 'string') el = document.getElementById(el); 

    if (!hasClassName(el, cName)) { 
     el.className = trim(el.className + ' ' + cName); 
    } 
} 

function removeClassName(el, cName) { 

    if (typeof el == 'string') el = document.getElementById(el); 

    if (hasClassName(el, cName)) { 
     var re = new RegExp('(^|\\s+)' + cName + '(\\s+|$)','g'); 
     el.className = trim(el.className.replace(re, '')); 
    } 
} 
+0

謝謝 - 無論如何,似乎你在處理他的問題 - 我仍然想看看我的代碼出錯了。 – mplungjan

+0

找到了。 - 只需要在添加中測試myclass的存在 – mplungjan