2014-09-15 1 views
3

부모 요소 중 하나 이상에 속성을 사용하지 않도록 설정 한 경우 아이들을 비활성화하는 우아한 방법은 무엇입니까?Polymer에서 속성이 비활성화 된 요소 내에서 하위 요소를 사용하지 않도록 설정하는 방법은 무엇입니까?

나는 그룹 내에 중첩 된 양식 필드가 있는데, 여기서 각 그룹과 필드는 다른 필드의 값에 따라 비활성화 될 수 있습니다. 여러 부모를 서로 독립적으로 비활성화 할 수 있습니다. 물론, 내가 선택하고 반복적으로 하위를 비활성화 할 수 있습니다. 즉 최근에 비활성화 된 상위의 필드를 비활성화 할 수 있습니다. 그러나 필드를 다시 활성화하려면 더 이상 장애 부모가 아닌 모든 필드를 반복해야합니다.

또는 각 부모에게 이벤트를 등록하는 것이 더 좋습니까? 구조는 약 100 개의 요소를 가진 3의 추정 깊이를가집니다.

상위 양식 필드 또는 aria-disabled 애트리뷰트는 하위 필드를 비활성화 할 수 있지만 종이 요소는이를 인식하지 않으므로 옵션이 없습니다.

미리 감사드립니다.

답변

0

창조적 인 해결책의 비트는 속성이 disabled 인 두 입력 요소를 만들고 나머지 요소는 부모가 disabled 특성 세트를 가졌는지 여부에 따라 표시/숨기기입니다.

* /deep/ input[disabled] { 
    display: none; 
} 

[disabled] /deep/ input[disabled] { 
    display: initial; /* or inline */ 
} 

[disabled] /deep/ input:not([disabled]) { 
    display: none; 
} 

아직 :not()를 사용하지 않았습니다. 이것은 당신이 활성화 된 입력 요소에 속성 enabled을 설정할 수 있습니다 일을하고 내가 솔루션을 테스트하지 않았습니다하지만 난 그것을 작동합니다 생각하지만 당신이에 관심이 있다면 나도 몰라

[disabled] /deep/ input:[enabled] { 
    display: none; 
} 

를 사용하지 않는 경우 어쨌든 해결책의 종류.

+0

올바르게 이해하면 모든 바인딩에 대해 두 개의 필드가 표시됩니다. 나는 당신의 접근 방식이 JS 측에 아무런 노력이 없다고 생각합니다. 그러나 모든 분야를 두 번 개최하는 것이 우아 할 지 여부는 논쟁의 여지가 있습니다. 감사! 때로는 다른 방향의 문제도 고려하는 데 도움이됩니다. –

+0

정확합니다. 두 번째 입력은 아무 것도하지 않고 바인딩이 없지만 두 개 중 하나가 CSS에 의해 제어됩니다. 이것은'querySelectorAll (...) forEach (...)'를 사용하지 않고 생각할 수있는 유일한 솔루션입니다 (다트 코드, 잘 모르겠지만 무슨 뜻인지 알 것 같습니다). 왜냐하면'disabled '속성은 상속 될 수 없습니다. –

관련 문제