2010-05-14 4 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(); 
    }); 

}); 

앞의 코드는 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를 사용하면 이러한 유형의 연산이 간단해질 수 있습니다. –

+0

jQuery도 좋아 보이지만 Prototype은 완전히 좋은 프레임 워크입니다. – Pointy

+0

'$$ ('input')'은 "select"설정과 같습니다. – Pointy

답변

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

예,로드 할 때 작동하고, 체크 된 요소가 있으면 페이지로드를 확인하고 '예'클래스를 할당해야합니다 (또는 체크 된 요소가 없지만 클래스가 '예'인 경우 제거해야합니다). 그러나 다음 번 코드에서 클릭 이벤트가 발생하면 입력이 확인되면 상위 리에 '예'클래스가 추가되어야하고 입력 (체크 박스)의 선택을 취소하면 제거되어야합니다 클래스 '예' 이것은 이벤트 관측을 위해 사용한 코드입니다. – BoDiE2003

+0

document.observe ("dom : loaded", function() { $ (document.body) .select ('input' 기능 (요소) { element.observe()가 (기능 '클릭'{ 초기화(); }) 초기화(); }) }); – BoDiE2003

+0

이 코드는 작동하지만 element.up ('li')없이 removeClassName ('yes')을 사용해야했습니다. – BoDiE2003

0

잠깐 - "선택"은 요소의 배열을 반환합니다. "hasClassName"함수는 Array 또는 Enumerable이 아닌 Element의 함수입니다. "each()"레이어가 누락되었습니다.

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

이전 대답을 확인하십시오 : 예,로드 할 때 작동하며, 체크 된 요소가있는 경우 페이지로드를 확인하고 '예'클래스를 할당합니다 (또는 체크 된 요소가 없지만 클래스가있는 경우 제거하십시오. '예'). 그러나 다음 번 코드에서 클릭 이벤트가 발생하면 입력이 확인되면 상위 리에 '예'클래스가 추가되어야하고 입력 (체크 박스)의 선택을 취소하면 제거되어야합니다 클래스 '예'이것은 이벤트 관찰자를 위해 사용한 코드입니다. – BoDiE2003

관련 문제