Pergunta

Tenho certeza de que já foi perguntado um milhão de vezes, mas depois de horas pesquisando e mexendo, não consegui encontrar uma solução...Espero que alguém aqui possa me ajudar.

Eu tenho uma lista do SharePoint que possui uma coluna de botões de opção Sim/Não sem valor padrão e uma coluna de comentários de várias linhas.

Quando o usuário carrega o formulário, a caixa de comentários deve estar oculta.Se o usuário selecionar a opção “Sim”, a caixa de comentários deverá permanecer oculta.Quando o usuário seleciona o botão “Não”, a caixa de comentários deverá aparecer e ser obrigatória, mas se o usuário selecionar “Sim” novamente, a caixa deverá desaparecer e não ser mais obrigatória.

Tenho brincado com esse código, mas ainda não consegui fazer nada funcionar.

<script type="text/javascript">

  _spBodyOnLoadFunctionNames.push("hideFieldsOnStart");

  function hideFieldsOnStart() {
    var control = getTagFromIdentifierAndTitle("input","TextArea","Comments");
    control.parentNode.parentNode.parentNode.style.display="none";
    getTagFromIdentifierAndTitle ("input","RadioButtons","Materiality Assessment Completed").onchange = function() {ChangeEvent()};
  }

  function ChangeEvent() {
    var dropdown  = getTagFromIdentifierAndTitle("input","RadioButtons","Materiality Assessment Completed");
    var option = dropDown.options[dropDown.selectedIndex].text;
    var control = getTagFromIdentifierAndTitle ("input","TextArea","Comments");
    if(option == "No") {
      control.parentNode.parentNode.parentNode.style.display="";
    } else {
      control.parentNode.parentNode.parentNode.style.display="none";
    }
  }

  function getTagFromIdentifierAndTitle(tagName, identifier, title) {
    var len = identifier.length;
    var tags = document.getElementsByTagName(tagName);
    for (var i=0; i < tags.length; i++) {
      var tempString = tags[i].id;
      if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {
        return tags[i];
      }
    }
    returnnull;
  }
</script>

Se alguém puder ajudar, ficaria muito agradecido.Estamos usando o WSS 2007.Tenho acesso ao SharePoint Designer 2007, mas não ao InfoPath.Idealmente, eu gostaria que isso fosse concluído através do uso de um CEWP.

Obrigado!

--

Código que consegui funcionar graças ao SPUtility.js

<script src="/lib/jquery-1.11.1.min.js"></script>
<script src="/lib/sputility.min.js"></script>

<script>
$(document).ready(function(){

    var ynField = SPUtility.GetSPField('Materiality Assessment Completed');
    var ynFieldValue = ynField.GetValue();

    if(ynFieldValue == "No") {
        SPUtility.GetSPField('Comments').SetValue("");
        SPUtility.GetSPField('Comments').Show();
    }
    else {
        SPUtility.GetSPField('Comments').SetValue("N/A");
        SPUtility.GetSPField('Comments').Hide();
    }

    var id = SPUtility.GetSPField('Materiality Assessment Completed').Dropdown.id;

    $('#'+id).on('change', function() {
        var ynFieldValue = ynField.GetValue();
        if (ynFieldValue == "No") {
            SPUtility.GetSPField('Comments').SetValue("");
            SPUtility.GetSPField('Comments').Show();
        }
        else {
            SPUtility.GetSPField('Comments').SetValue("N/A");
            SPUtility.GetSPField('Comments').Hide();
        }
    });

});
</script> 
Foi útil?

Solução

Acho que seria melhor fazer alguma renderização do lado do cliente.Você pode definir PostRender funcionalidade para ocultar o campo com base no valor do campo do botão de opção.

Além do acima, você pode dar uma olhada nisso link.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top