Ответы пользователя по тегу PrimeFaces
  • Почему скрипт не видит элемент с id?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Есть два "родных" способа скрыть какой-либо элемент интерфейса. Первый способ - не рендерить его вообще:
    <p:commandButton value="Скрыть/Показать">
      <f:ajax listener="#{exampleBean.toggleVisibility}" event="click" render="somePanel"></f:ajax>
    </p:commandButton>
    
    <h:panelGroup id="somePanel" layout="block" rendered="#{exampleBean.visible}">
        <div>Трям!</div>
    </h:panelGroup>

    Второй - задать ему соответствующий класс:
    <h:panelGroup id="somePanel" layout="block" styleClass="#{(exampleBean.visible) ? 'hidden' : ''">
        <div>Трям!</div>
    </h:panelGroup>

    Можно, конечно, и обработчики javascript навесить на события:
    <script>
        function toggleVisibility(id) {
            var table = document.getElementById(id);
            if(table) {
                var currentState = table.style.display || 'block';
                if (currentState === 'block')
                    table.style.display = 'none';
                else
                    table.style.display = 'block';
            }
            return false;
        }
    </script>
    
    <p:commandButton value="Скрыть/Показать" onclick="toggleVisibility('globalform:visTest:checking');">
    </p:commandButton>

    Но надо оно вам? Происходит размазывание сильносвязанного кода, появляются всякие сложности, типа автогенерируемых идентификаторов, да и много ещё чего. Всё это преодолимо, конечно, если оно того стоит.
    Ответ написан
    1 комментарий