SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Felder in NewForm.aspx ausblenden wenn MultiChoice Feld bestimmten Wert hat (javascript)

Geprüfte Antwort Dieser Beitrag hat 5 Antworten

Ohne Rang
49 Beiträge
Mel89 erstellt 10 Okt. 2014 12:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen

Ich habe folgenden Code in mein NewForm.aspx eingebettet, um das Textfeld "Test1" auszublenden. Der Code funktioniert wunderbar.

<script type="text/javascript">

_spBodyOnLoadFunctionNames.push("hideFieldsOnStart");

function hideFieldsOnStart() {

//hide the control at start
var feldausblenden= getTagFromIdentifierAndTitle("input","TextField","Test1");

feldausblenden.parentNode.parentNode.parentNode.style.display="none";


 getTagFromIdentifierAndTitle("input","BooleanField","Test").onchange = function() {ChangeEvent()};
 }

 function ChangeEvent()
 {

//get the dropdown
 var checkbox = getTagFromIdentifierAndTitle("input","BooleanField","Test");
//get the control
var feldausblenden= getTagFromIdentifierAndTitle("input","TextField","Test1");
//show hide based on your condition
 if(checkbox.checked)
 {
 feldausblenden.parentNode.parentNode.parentNode.style.display="";
 }
 else
 {
 feldausblenden.parentNode.parentNode.parentNode.style.display="none";
 }
}

//this gets the field based on title identifier and tagname
  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];
    }
  }
  return null;
}

 </script>

Nun möchte ich aber das Textfeld "Test1" basierend auf einem Sharepoint MultiChoice Feld ein-/ausblenden. Ich weiss nicht wie ich diesen Feldtyp ansprechen kann. Habe bereits mit verschiedenen Möglichkeiten versucht:

getTagFromIdentifierAndTitle("select","DropDownChoice","meinMultiChoiceFeld")

getTagFromIdentifierAndTitle("input","checkbox","meinMultiChoiceFeld")

--> nichts davon funktioniert. Könnt ihr mir weiterhelfen??

 

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 10 Okt. 2014 14:01
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

An die Dinger kommt man nicht ganz so einfach ran. Die Checkboxen werden in einer Tabelle gerendert und sie bestehen aus <span>, <input> und <label>.

Wenn Du mit jQuery arbeitest, hast Du es da deutlich einfacher. Und schaue Dir auch das mal an: https://sputility.codeplex.com/ Benutzt ebenfalls jQuery und macht den Zugriff auf Forumalrelemente deutlich einfacher. Ich weiß nur gerade nicht, ob auch Multiselect-Choice-Felder unterstützt werden.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
49 Beiträge
Mel89 Als Antwort am 14 Okt. 2014 16:09
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke, Andi für deine Rückmeldung. Ich starte nun einen neuen Versuch mit JQuery, wie du empfohlen hast. Ich weiss zwar, wie ich die Felder zu Beginn verstecken kann, jedoch funktioniert die Change-Funktion nicht. Also ich möchte basierend auf dem Boolean-Feld "Eventbroschüre 105x148 mm" das Datumsfeld "Liefertermin Eventbroschüre" verstecken oder eben anzeigen. Mein Code - der nicht funktioniert - sieht folgendermassen aus:

<script src="/csa/SiteCollectionDocuments/jquery-1.11.1.min.js"></script>
<script src="/csa/SiteCollectionDocuments/sputility.min.js"></script>
<script>
// wait for the window to load
$(window).load(function () {

   var eventbroschure = SPUtility.GetSPField('Eventbroschüre 105x148 mm');
   var lieferterminevent = SPUtility.GetSPField('Liefertermin Eventbroschüre');
  
   function handleFieldChange()
{
   if (eventbroschure.GetValue() === 'false')
   {  
   lieferterminevent.Hide();
   }
   else
   {
   lieferterminevent.Show();
   }
}

    // -----  Hide the field at the beginning if the default value is No.
    handleFieldChange();


});

</script>

 

Kann mir jemand weiterhelfen?? Vielen Dank!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 15 Okt. 2014 11:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Im Moment rufst Du die handleFieldChange-Methode ja nur beim Start einmal auf. Du mußt sie aber auch an das Feld binden, so daß sie bei Änderungen ebenfalls ausgeblendet wird (falls das gewünscht ist).

Dann noch die Frage, was Du in der Variablen eventBrochure erwartest. Das ganze Feld mit all seinen Auswahlmöglichkeiten oder nur die eine Checkbox, also eine Auswahlmöglichkeit von vielen?

SPUtility lifert Dir immer ein komplettes Feld. Ich habe es selbst noch nicht mit Multiselect-Auswahlen gemacht und weiß deshalb nicht wie weit die von SPUtility unterstützt werden. Schaue Dir einfach mal das geliferte Objekt in einem Debugger Deiner Wahl an (F12 im IE).

Du benutzt um an die Felder zu kommen deren angezeigten Namen (der auch noch Sonderzeichen enthält). Hier würde ich dringend empfehlen SPUtility.GetSPFieldByInternalName mit dem internen Namen verwenden. Der enthält keine Sonderzeichen und er kann sich nicht ändern.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
49 Beiträge
Mel89 Als Antwort am 30 Okt. 2014 08:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielen Dank Andi, für Deine Antwort.

Habe inzwischen die funktionierende Lösung gefunden:

<!--
showhidedependentfield.html
Author: Kit Menke
Date: Oct. 19, 2014
Requirements:
1. Make a text field dependent on a checkbox field.
2. Show the field when the checkbox is checked, otherwise hide it.
List setup:
Checkbox Field: Checkbox choice field
Alpha
Bravo
Or any field values you want
Text Alpha: Textbox field
Text Bravo: Textbox field
-->
<script src="/kitsite/Files/jquery-1.11.1.min.js"></script>
<script src="/kitsite/Files/sputility.js"></script>
<script>
$(document).ready(function(){
// Get both SharePoint fields
var checkboxField = SPUtility.GetSPField('Checkbox Field');
// attach "change" event handlers to some of the checkboxes
$(checkboxField.Checkboxes).each(function(index, obj) {
var checkbox = obj.value;
var checkboxName = obj.key;
var dependentFieldName;
// set up which field is dependent on the checkbox
if (obj.key === "Alpha") {
// TODO: modify this to be your field names
dependentFieldName = "Text Alpha";
} else if (obj.key === "Bravo") {
// TODO: modify this to be your field names
dependentFieldName = "Text Bravo";
} else {
// no dependencies
dependentFieldName = null;
// default field maybe? right now just set to null;
}
// show or hide field based on the dependent checkbox
if (dependentFieldName) {
var checkboxEventHandler = function() {
if (checkbox.checked) {
SPUtility.GetSPField(dependentFieldName).Show();
} else {
SPUtility.GetSPField(dependentFieldName).Hide();
}
};
$(checkbox).change(checkboxEventHandler);
// run once at startup
checkboxEventHandler();
}
});
});
</script>

 

Funktioniert perfekt.

Ohne Rang
49 Beiträge
Mel89 Als Antwort am 30 Okt. 2014 08:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielen Dank Andi, für Deine Antwort.

Habe inzwischen die funktionierende Lösung gefunden:

<!--
showhidedependentfield.html
Author: Kit Menke
Date: Oct. 19, 2014
Requirements:
1. Make a text field dependent on a checkbox field.
2. Show the field when the checkbox is checked, otherwise hide it.
List setup:
Checkbox Field: Checkbox choice field
Alpha
Bravo
Or any field values you want
Text Alpha: Textbox field
Text Bravo: Textbox field
-->
<script src="/kitsite/Files/jquery-1.11.1.min.js"></script>
<script src="/kitsite/Files/sputility.js"></script>
<script>
$(document).ready(function(){
// Get both SharePoint fields
var checkboxField = SPUtility.GetSPField('Checkbox Field');
// attach "change" event handlers to some of the checkboxes
$(checkboxField.Checkboxes).each(function(index, obj) {
var checkbox = obj.value;
var checkboxName = obj.key;
var dependentFieldName;
// set up which field is dependent on the checkbox
if (obj.key === "Alpha") {
// TODO: modify this to be your field names
dependentFieldName = "Text Alpha";
} else if (obj.key === "Bravo") {
// TODO: modify this to be your field names
dependentFieldName = "Text Bravo";
} else {
// no dependencies
dependentFieldName = null;
// default field maybe? right now just set to null;
}
// show or hide field based on the dependent checkbox
if (dependentFieldName) {
var checkboxEventHandler = function() {
if (checkbox.checked) {
SPUtility.GetSPField(dependentFieldName).Show();
} else {
SPUtility.GetSPField(dependentFieldName).Hide();
}
};
$(checkbox).change(checkboxEventHandler);
// run once at startup
checkboxEventHandler();
}
});
});
</script>

 

Funktioniert perfekt.