Question

Je suis sûr que cela a été demandé un million de fois, mais après des heures de recherche et de confusion, je n'ai pas réussi à trouver de solution... J'espère que quelqu'un ici pourra m'aider ?

J'ai une liste SharePoint qui comporte une colonne de boutons radio Oui/Non sans valeur par défaut et une colonne de commentaires sur plusieurs lignes.

Lorsque l'utilisateur charge le formulaire, la zone de commentaires doit être masquée.Si l'utilisateur sélectionne l'option « Oui », la zone de commentaires doit rester masquée.Lorsque l'utilisateur sélectionne le bouton « Non », la boîte de commentaires doit apparaître et être obligatoire, mais si l'utilisateur sélectionne ensuite à nouveau « Oui », la boîte doit disparaître et ne plus être obligatoire.

J'ai joué avec ce code, mais je n'ai pas encore réussi à faire fonctionner quoi que ce soit.

<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>

Si quelqu'un peut aider, ce serait grandement apprécié.Nous utilisons WSS 2007.J'ai accès à SharePoint Designer 2007, mais pas à InfoPath.Idéalement, j'aimerais que cela soit complété par l'utilisation d'un CEWP.

Merci!

--

Code sur lequel j'ai travaillé grâce à 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> 
Était-ce utile?

La solution

Je pense qu'il serait peut-être préférable de faire un rendu côté client.Vous pouvez définir PostRender fonctionnalité permettant de masquer le champ en fonction de la valeur du champ du bouton radio.

En dehors de ce qui précède, vous pouvez jeter un oeil à ceci lien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top