Frage

Ich bin mir sicher, dass die Frage schon eine Million Mal gestellt wurde, aber nach stundenlangem Suchen und Rumprobieren konnte ich keine Lösung finden ... Hoffentlich kann mir hier jemand helfen?

Ich habe eine SharePoint-Liste mit einer Ja/Nein-Optionsfeldspalte ohne Standardwert und einer mehrzeiligen Kommentarspalte.

Wenn der Benutzer das Formular lädt, sollte das Kommentarfeld ausgeblendet sein.Wenn der Benutzer die Option „Ja“ wählt, sollte das Kommentarfeld ausgeblendet bleiben.Wenn der Benutzer die Schaltfläche „Nein“ auswählt, sollte das Kommentarfeld erscheinen und obligatorisch sein. Wenn der Benutzer jedoch dann erneut „Ja“ auswählt, sollte das Feld verschwinden und nicht länger obligatorisch sein.

Ich habe mit diesem Code herumgespielt, habe aber noch nichts zum Laufen gebracht.

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

Wenn jemand helfen kann, wäre ich sehr dankbar.Wir verwenden WSS 2007.Ich habe Zugriff auf SharePoint Designer 2007, aber nicht auf InfoPath.Idealerweise möchte ich, dass dies durch den Einsatz eines CEWP erreicht wird.

Danke schön!

--

Den Code habe ich dank SPUtility.js zum Laufen gebracht

<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> 
War es hilfreich?

Lösung

Ich denke, es wäre besser, wenn Sie ein clientseitiges Rendering durchführen würden.Sie können definieren PostRender Funktionalität zum Ausblenden des Felds basierend auf dem Wert des Optionsfeldfelds.

Abgesehen von dem oben Gesagten können Sie sich das hier ansehen Verknüpfung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top