Ocultar/exigir coluna de formulário condicionalmente com base em botões de opção
-
29-09-2020 - |
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>
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.