在sharepoint显示模板中执行JS

Execute JS in sharepoint display template

本文关键字:执行 JS sharepoint 显示      更新时间:2024-01-19

在我的sharepoint列表中,我正在处理应该有附件的项目。我自定义了模板,这样我就可以添加附件,但我认为不可能将附件标记为强制性的。我设法用脚本检查了附件

<script type="text/javascript" language="javascript">
            function PreSaveAction() 
            {
                        var elm = document.getElementById(&quot;idAttachmentsTable&quot;);
                        if (elm == null || elm.rows.length == 0)
                        {
                            document.getElementById(&quot;idAttachmentsRow&quot;).style.display=&apos;none&apos;;
                            alert(&quot;Please attach Documents&quot;);
                            return false ;
                        }
                        else { return true ;}
            }
</script>

但我只能在自定义表单(而不是模板)中使用它。由于该模板几乎用于与列表的任何交互,我想使用它,并希望在加载模板后执行js代码。该模板在标签<ZoneTemplate></ZoneTemplate>之间被引用。该表单中有更多的代码,但sharepoint设计器不允许我编辑这两个标签之间的任何内容。

这真的很令人沮丧,因为我似乎错过了一个明显的要点。希望我提供了足够的信息,因为我不习惯使用sharepoint,它是他们的表单和模板。。。

当您需要向列表表单添加JavaScript时,可以直接浏览到该表单。例如,如果您的列表名为MyList,则新项目表单将位于http://url/Lists/MyList/newform.aspx编辑表单将位于EditForm.aspx。浏览到要插入javascript代码的页面,然后在"站点操作"下单击"编辑页面"。添加内容编辑器Web部件,然后将javascript直接插入到内容编辑器Web部分的HTML中,或者添加到具有javascript的HTML文件的链接。

至于将附件标记为必填项,您可能只需要在表单中包含一些措辞,指示用户单击"附加文件"按钮。也许像这样的东西会在表单的底部添加一行

<script type="text/javascript">
function addRow() {
  var required = document.createTextNode("*");
  var table = document.getElementsByClassName("ms-formtable")[0];
  var tbody = table.getElementsByTagName("tbody")[0];
  var tr = document.createElement("tr");
  var td1 = document.createElement("td");
  td1.setAttribute("class","ms-formlabel");
  td1.setAttribute("vAlign","top");
  var h31 = document.createElement("h3");
  h31.setAttribute("class","ms-standardheader");
  var text1 = document.createTextNode("Attachment");
  h31.appendChild(text1);
  var span1 = document.createElement("span")
  span1.setAttribute("class","ms-formvalidation");
  span1.setAttribute("title","This is a required field");
  span1.appendChild(required);
  h31.appendChild(span1);
  var td1.appendChild(h31);
  var tr.appendChild(td1);
  var td2 = document.createElement("td");
  td2.setAttribute("class","ms-formbody");
  td2.setAttribute("vAlign","top");
  var text2 = document.createTextNode("Click the Attach File button in the ribbon to add an attachment");
  var td2.appendChild(text2);
  var tr.appendChild(td2);      
  var tbody.appendChild(tr);
  }
</script>

这非常难看,可以使用jQuery进行简化。

<script type="text/javascript">
function addRow() {
  var h3 = $('<h3 class="ms-standardheader">Attachment</h3>').append('<span class="ms-formvalidation">*</span>');
  var td1 = $("<td></td>").append(h3);
  var td2 = $("<td>Click the Attach File button in the ribbon to add an attachment</td>");
  var tr = $("<tr></tr>").append(td1);
  $(tr).append(td2); 
  $(".ms-formtable").first().find("tbody").first().append(tr);
}
</script>

请记住,这是未经测试的,可能有一些错误。