2010-05-14 15 views
0

我試圖選擇文檔的所有li標籤並檢查它是否hasClassName('yes')因此,如果有,它會將其刪除。但我有TypeError:Object [object HTMLLIElement], has no method 'hasClassName'錯誤如果輸入被選中,則使用Javascript:addClassName,如果未選中,則使用removeClassName

這是DOM方法:

document.observe("dom:loaded", function() { 
    $(document.body).select('input').each(function(element) { 
     element.observe('click', function() { 
      init(); 
     }); 
     init(); 
    }); 

}); 

上面的代碼將初始化函數,並檢查是否有被檢查輸入,並將它們添加了「是」類的名字,但如果我取消勾選那些投入,類仍然存在。 這是我試圖做動態的功能(添加和刪除類'是');

function init() { 
    $(document.body).select('input').each(function(element) { 
     if (element.checked) { 
      element.up('li').addClassName('yes'); 
     } 

     if ($(document.body).select('li').hasClassName('yes')) { 
      element.removeClassName('yes'); 
     } 
    }) 
} 

你能幫我解決這個函數的最後部分,所以removeclassname方法會起作用嗎?謝謝。

+0

對不起,錯誤的答案。看起來不夠近。話雖如此,您可能會考慮使用JQuery,因爲它使這些類型的操作變得微不足道。 – 2010-05-14 15:41:53

+0

看起來我也很喜歡jQuery,但Prototype本身就是一個完美的框架。 – Pointy 2010-05-14 15:45:30

+0

請注意,$$('input')'與您的「select」設置相同。 – Pointy 2010-05-14 15:46:38

回答

1

$(document.body).select('li')返回一個集合,而不是一個元素,對嗎?我會假設你想:

if (element.hasClassName('yes')) { 
     element.removeClassName('yes'); 
    } 

然而,似乎你的邏輯是有缺陷的 - 你第一次添加如果輸入被檢查,那麼你會立即刪除它的類。你錯過了else?也許更類似於:

function init() { 
    $(document.body).select('input').each(function(element) { 
     if (element.checked) { 
      element.up('li').addClassName('yes'); 
     } 
     else { 
      element.up('li').removeClassName('yes'); 
     } 
    }) 
} 
+0

是的,但它應該,加載時,檢查頁面加載是否有一個checked元素,併爲其分配'yes'類(或者如果沒有檢查元素,但他們的類爲'yes'則刪除)。但同時,在下一個代碼中,如果有一個點擊事件,如果檢查了一個輸入,它應該向父類li添加'yes'類,並且如果取消選中一個輸入(複選框),它應該刪除(yes) 這是我用於事件觀察者的代碼 – BoDiE2003 2010-05-14 19:57:16

+0

document.observe(「dom:loaded」,function(){(document.body).select('input')。each(功能(元件){ element.observe( '點擊',函數(){ 的init(); }); 的init(); }); }); – BoDiE2003 2010-05-14 19:58:10

+0

這一個工作,但我不得不使用element.up()。removeClassName('yes')沒有element.up('李') - 沒有李我的意思。 – BoDiE2003 2010-05-14 20:35:40

0

等一下 - 「select」將返回一組元素。 「hasClassName」函數是Element上的一個函數,不是Array或Enumerable。你錯過了「每個()」圖層。

$$('li').each(function(li) { 
    if (li.hasClassName('yes')) li.removeClassName('yes'); 
}); 
+0

檢查以前的答案: 是的,但它應該,加載時,檢查頁面加載是否有一個檢查元素,併爲其分配'是'類(或刪除如果沒有檢查元素,但他們有類'是')。但同時,在下一個代碼中,如果有一個點擊事件,如果檢查了一個輸入,它應該向父類li添加'yes'類,並且如果取消選中一個輸入(複選框),它應該刪除班級'是'這是我用於事件觀察員的代碼 - – BoDiE2003 2010-05-14 19:58:31

相關問題