昨天一同事问我怎样在sharepoint2013的NewForm.aspx页面上加入一个 save and new的button。实现save 和new的功能。save的功能和默认的save按钮效果一至。

效果如图:

这里的思路例如以下:

1)用juqery来动态加入一个saveandnew的button

2)新建button的click事件将要调用默认save button的click方法

3)新button的click事件后页面跳转主要取决于url的Source參数。所以我们必须改写获取该參数的方法,该參数的读取是在init.debug.js的GetUrlKeyValue方法。

改动方式例如以下:

window.savefun = GetUrlKeyValue;

                window.GetUrlKeyValue = function (keyName, bNoDecode, url, bCaseInsensitive) {

                    if (keyName != "Source") {

                        return window.savefun(keyName, bNoDecode, url, bCaseInsensitive);

                    }

                    else {

                        return "/Lists/CustList/NewForm.aspx";

                    }

                }

首先我须要把原先的GetUrlKeyValue方法保存起来。然后覆盖默认的GetUrlKeyValue方法。

这是的函数调用情况

因为GetUrlKeyValue函数的覆盖是在 “保存新建 ”button事件里面,所以 当我进入页面后 直接点击 “保存” button 页面跳转到AllItems.aspx,直接点击“保存新建” button跳转到NewForm.aspx页面,可是 假设 点击“保存新建” button时。 客服端 有error的时候。当我们改动数据后 点击“保存” button时。这个时候就有问题(页面跳转到NewForm.aspx页面而不是AllItems.aspx),找了非常久也没找到客服端真正验证的地方(假设大家知道的还请不吝赐教,反正不是后面这句代码
if (!PreSaveItem()) return false;if (SPClientForms.ClientFormManager.SubmitClientForm('WPQ2')) return false),最后无赖仅仅好通过setInterval方法来检查页面是否有error信息,假设有 我们就把GetUrlKeyValue方法还原。

终于的代码例如以下:

 <script type="text/javascript" src="/siteassets/js/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var btnsave = $("input[id*='diidIOSaveItem']")[1];
var tableSave = $(btnsave).parents(".ms-toolbar").eq(0);
var strsaveAndNew = ' <td class="ms-toolbar" nowrap="nowrap"><input type="button" value="SaveAndNew" id="btnsaveAndNew" /></td><td class="ms-separator"> </td>';
$(strsaveAndNew).insertBefore(tableSave); window.savefun = GetUrlKeyValue;
$("#btnsaveAndNew").click(function () {
window.btnsaveAndNew = true; window.GetUrlKeyValue = function (keyName, bNoDecode, url, bCaseInsensitive) {
if (keyName != "Source") {
return window.savefun(keyName, bNoDecode, url, bCaseInsensitive);
}
else {
return "/Lists/CustList/NewForm.aspx";
}
} $(btnsave).click();
window.btnsaveAndNew = false;
}); });
setInterval(function () {
var errors = $("span[id^='Error_']");
if (errors.length > 0 && !window.btnsaveAndNew) {
window.GetUrlKeyValue = window.savefun;
}
}, 100);
</script>

有不正确的地方 还请大家拍砖

最新文章

  1. android笔记:获取View组件宽度以及ViewTreeObserver
  2. 解决 uuid.h找不到的问题
  3. Unity Camera的两种模式
  4. pycharm上运行django服务器端、ip地址访问
  5. mac java目录
  6. common.css 值得学习的css样式布局
  7. Docker网络管理-外部访问容器
  8. 深入研究Clang(四) Clang编译器的简单分析
  9. 【百度地图API】建立全国银行位置查询系统(一)——如何创建地图
  10. angular2教程
  11. [BZOJ1707] [Usaco2007 Nov] tanning分配防晒霜 (贪心)
  12. django rest-framework 1.序列化 一
  13. 在graphviz中创建可点击的图形
  14. PHP开发——目录
  15. Django 学习手册 - 下载数据库表格(XLS/CSV)
  16. Sqlite之事务
  17. Docker导入、导出、删除容器
  18. 每秒查询率QPS
  19. Python学习笔记(三十二)常用内建模块(1)— datetime
  20. vue知识点2018.6.3

热门文章

  1. WordPress添加前台注册功能
  2. Fatal error: Call to a member function rowCount() on a non-object in /opt/lampp/htdocs/xampp/assets/update.php on line 6
  3. 微软.net一些类的源码
  4. HDU-4738 Caocao's Bridges,注意重边不是桥!
  5. 【Luogu】P1868饥饿的奶牛(DP)
  6. BZOJ 3110 [Zjoi2013]K大数查询 ——树套树
  7. P1410 子序列 (动态规划)
  8. 【noip】noip201503求和(题解可能不完美,但绝对详细)
  9. POJ1861 Network
  10. 标准C程序设计七---11