在sharepoint显示模板中执行JS
Execute JS in sharepoint display template
在我的sharepoint列表中,我正在处理应该有附件的项目。我自定义了模板,这样我就可以添加附件,但我认为不可能将附件标记为强制性的。我设法用脚本检查了附件
<script type="text/javascript" language="javascript">
function PreSaveAction()
{
var elm = document.getElementById("idAttachmentsTable");
if (elm == null || elm.rows.length == 0)
{
document.getElementById("idAttachmentsRow").style.display='none';
alert("Please attach Documents");
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>
请记住,这是未经测试的,可能有一些错误。
相关文章:
- Meteor:插入集合后如何执行JS
- 如何在Odoo 9中执行JS文件中的函数
- 匿名自执行js函数内部的全局变量在外部仍然可用
- NumericTextBox-当用户键入数字时执行JS计算.能做到吗
- 引导:响应式设计-当窗口大小从980px调整到979px时执行JS
- 对页面上的所有ID执行JS功能
- 从浏览器访问页面时执行js函数's后退按钮
- 源代码未完全执行.(JS)
- 在执行JS脚本后监视对DOM的更改
- 在表单同步提交后执行 js 吗?
- 在 ubuntu 14.04 VPS 上执行.js文件错误
- 从PHP插入时在MongoDB上执行JS
- 在将ajax内容应用到元素后执行js函数
- Windows Phone浏览器控件执行JS函数来替换src属性
- 到达新页面后执行js
- 用C#在Win 8.1 Chakra中执行JS的一个失败的最小例子
- 在sharepoint显示模板中执行JS
- 在Bootstrap popover内部执行JS
- 从引导程序popover内容内部执行js
- 顺序执行js