SharePoint 2013 扩展查阅项功能

原文:SharePoint 2013 扩展查阅项功能

  SharePoint 2013的查阅项功能,就是可以扩展其他列表字段为当前列表选项,但是选项太多的时候,会造成选择起来非常麻烦,所以,我们采取JS+Ajax的方式,改善一下这个展示,使操作更加方便。

展现效果

  如下图,当我在Textbox里输入北京,会把北京开头的选项,加载到下拉选项中,如果什么都不输入,就是全部下拉选项,这样比较方便选项多的时候,进行筛选选择;

原理介绍

1、 使用JS隐藏原来的Select控件;

  使用F12查看Select的Html代码,发现有Title是字段名,还有id属性,而option的value就是该item的id,所以,我们可以使用JS来操作这个select,如下图;

  隐藏Select的JS脚本,就是获取所有的select控件对象,然后找到title相符合的,当然你也可以根据id来获取,id的格式应该是内部字段名称+列表GUID+字段类型标识,看你的习惯了,附JS脚本如下:

function HiddenField(strSelectTitle)
{
    var selectObj = document.getElementsByTagName("select");
    for(var i=0;i<selectObj.length;i++)
    {
        if(selectObj[i].title==strSelectTitle)
        {
            selectObj[i].style.display=‘none‘;
        }
    }
}
setTimeout("HiddenField(‘所在城市‘)",1)

2、 使用JS在原来Select位置下面,添加一个Text类型Input,输入文字;

  这一步主要是在找到的select节点以后,使用parentNode找到父节点,然后在父节点的innerHTML里加入我们需要的Input,JS脚本附后:

if(selectObj[i].title==strSelectTitle)
{
    selectObj[i].style.display=‘none‘;
    var Par=selectObj[i].parentNode;
    Par.innerHTML=Par.innerHTML + "<table width=‘135‘ style=‘background-color:white‘ border=‘0‘ cellspacing=‘0‘ cellpadding=‘0‘><tr><td><table width=‘100%‘ bordercolor=‘#666666‘ border=‘0‘ cellspacing=‘0‘ cellpadding=‘0‘ style=‘border-collapse:collapse;cursor:default‘ onclick=‘showHide()‘><tr><td align=‘center‘><input type=‘text‘ name=‘C_Select‘ id=‘C_Select‘ onpropertychange=‘vChange()‘></td></tr></table></td></tr><tr><td><div id=‘oOption‘ onselectstart=‘return false‘></div></td></tr></table>";
}

3、 添加下拉菜单;

  以下主要就是你JS脚本,放在页面上就可以,没有什么特别需要说明的地方。当然,我们可以在相关事件上,添加我们需要的代码段。

特别:这些脚本是百度上查到的,但是他也是转载,没有原文链接,所以没有附后;

<!--隐现层的函数-->

<script type="text/javascript">
function showHide(obj){
    sh={block:"none",none:"block"}
    //层的display属性值在"block"和"none"间不断轮换,
    //达到轮换隐藏和显示的效果
    oOption.runtimeStyle.display=sh[oOption.currentStyle.display]
}
</script>

<!--鼠标移上id为oOption的对象时执行本段代码-->

<script event="onmouseover" for="oOption">
    obj=event.srcElement

    //判断onmouseover事件是否发生在单元格上
    if(obj.tagName=="TD"){

    //设置事件发生所在的单元格的背景颜色
    obj.style.backgroundColor="#dedede"

    //设置事件发生所在的单元格的字体颜色
    obj.style.color="#FFFFFF"
}
</script>

<!--鼠标从id为oOption的对象上移开时执行本段代码-->

<script event="onmouseout" for="oOption">
    obj=event.srcElement
    //判断onmouseout事件是否发生在单元格上
    if(obj.tagName=="TD"){
    //设置事件发生所在的单元格的背景颜色
    obj.style.backgroundColor="#FFFFFF"
    //设置事件发生所在的单元格的字体颜色
    obj.style.color="#000000"
}
</script>

<!--id为oOption的对象被单击时执行本段代码-->

<script event="onclick" for="oOption">
    obj=event.srcElement
    //判断onmouseover事件是否发生在单元格上
    if(obj.tagName=="TD"){
        showHide()//隐藏层
        //设置id为oSelect的对象内的文本为被点击的单元格内的文本
        document.getElementById("C_Select").innerText=obj.innerText
        var selectObj=document.getElementsByTagName(‘SELECT‘);
        for(var i=0;i<selectObj.length;i++)
        {
            if(selectObj[i].title=="所在城市")
            {
                var objvalue=obj.id.substring(8,obj.id.length);
                selectObj[i].value=objvalue;
            }
        }
    }
</script>

4、 写Ajax根据Input的值变化,更新下面的下拉结果;

<!—Ajax更新方法,将更新的Table放到Id为oOption的div里-->

function ajax() {
    //创建XMLHttpRequest对象
    var xmlHttp = new XMLHttpRequest();
    //获取值
    var k = escape(document.getElementById("C_Select").value);
    var url = "http://10.5.97.92/GetLookUpAjax/GetData.aspx?k=" + k;
    //配置XMLHttpRequest对象
    xmlHttp.open("get", url);
    //设置回调函数
    xmlHttp.onreadystatechange = function () {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
        document.getElementById("oOption").innerHTML = xmlHttp.responseText;
    }
    }
    //发送请求
    xmlHttp.send(null);
}

<!—监视Input值变化,如果变化则执行ajax方法更新下拉列表-->

  这个方法利用Input的onpropertychange事件,但是这个时间每有一个键盘动作,就会执行一次,所以我用一个隐藏域存上一次的Value的Length,和这一次比较,不一样的话执行Ajax事件,否则就当做输入但是Input域的Value值并没有变化。

function vChange()
{
    document.getElementById("hiddenNum").value=document.getElementById("C_Select").value.length;
    if(document.getElementById("C_Select").value.length>document.getElementById("hiddenNum").value.length)
    {
        ajax();
    }
}

5、 开发一个Ajax访问的页面,返回相关结果;

  这个方法没有太多要说明的,记得提升权限;利用Caml语句,获取与传入值匹配的项目集合,拼成Table返回,提供Ajax使用。

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    //此处放置需要以系统账号身份运行的代码
    using (SPWeb web = new SPSite("http://10.10.10.11").OpenWeb())
    {
        SPQuery query = new SPQuery();
        if (k != string.Empty)
        {
            query.Query = @"<Where>
                          <BeginsWith>
                             <FieldRef Name=‘Title‘ />
                             <Value Type=‘Text‘>" + HttpUtility.UrlDecode(k) + @"</Value>
                          </BeginsWith>
                       </Where>";
        }
        else
        {
            query.Query = "";
        }

        SPListItemCollection itemcoll = web.Lists["City"].GetItems(query);
        if (itemcoll.Count != 0)
        {
            rev = "<table cellsapcing=‘0‘ cellspadding=‘3‘ border=‘0‘ width=‘100%‘> ";
            foreach (SPListItem item in itemcoll)
            {
                rev = rev + "<tr><td id=myselect" + item["ID"].ToString() + ">" + item["Title"].ToString() + "</td></tr>";
            }
            rev = rev + "</table> ";

        }
    }
});

  整个功能的原理如上所示,利用JS替换页面的标签,变为自己的Input+下拉列表(div模拟),并监听Input的值变化,变化时通过Ajax更新div下拉列表,选择下拉列表,更新Input同时使用JS脚本更新隐藏的自带查阅项的Value值,完成我们的效果。

  功能十分简单,代码段也没有难度,就是简单介绍的一个小例子,给有相关需求的人一个参考;也算自己对于SharePoint 2013里使用Ajax的一个练习吧,希望在实践中提高自己的能力。

Ø 完整的Ajax实例

http://www.cnblogs.com/oneword/archive/2011/06/04/2072558.html

Ø 使用div 模仿下拉框

http://hi.baidu.com/wangtanbao/item/6debfe0f6ae8ab21a0312d27

时间: 2024-11-05 06:09:53

SharePoint 2013 扩展查阅项功能的相关文章

SharePoint 2013 使用查阅项实现联动下拉框

SharePoint列表使用中,经常会用到下拉框,而有些特殊的需求,会用到联动的下拉框,在SharePoint中默认没有这样的字段,所以如果实现,我们需要自己想办法. 这里,我们介绍如何使用JQuery+JavaScript客户端对象模型实现,下面让我简单介绍下实现的全过程. 1.创建基础列表CityList,保存的是城市名称,使用默认字段Title: 2.列表CityList的所有栏,我把Title字段的名称改为了City Name,如下图: 3.创建基础列表AreaList,用于保存所有区和

每日学习心得:SharePoint 2013 自定义列表项添加Callout菜单项、文档关注、SharePoint服务端对象模型查询

前言: 前一段时间一直都比较忙,没有什么时间进行总结,刚好节前项目上线,同时趁着放假可以好好的对之前遇到的一些问题进行总结.主要内容有使用SharePoint服务端对象模型进行查询.为SharePoint 自定义列表项添加callout菜单.希望能够给大家带来一些帮助. 1.  在aspx页引用可视化Web部件 有时候会需要在页面中引用项目中创建的可视化Web部件,具体步骤有以下这几步: 1) 在aspx页面顶部注册该可视化Web部件 示例如下: <%@ Register Tagprefix=&qu

SharePoint 2013 扩展 TilesViewWebPart

SharePoint 2013 增加了一个新的比较实用的 web part, 它就是TilesViewWebPart. 在新建一个Team site 后就可以在首页上看见它了: 它也可以新建议一个Promoted Link 列表作为数据源 但是如果要使用自定义的数据源怎么办呢? 答案是继承TilesViewWebPart类,并重写 GetTiles方法: using System; using System.ComponentModel; using System.Web; using Syst

解决在Azure SharePoint 2013 “在为项或数据源“FirstRSDS.rsds”加载模型时出现错误。请确认连接信息正确并且您有权访问该数据源。”

解决在Azure SharePoint 2013  "在为项或数据源"FirstRSDS.rsds"加载模型时出现错误.请确认连接信息正确并且您有权访问该数据源." 错误抓图如下 错误描述 <detail><ErrorCode xmlns="http://www.microsoft.com/sql/reportingservices">rsCannotRetrieveModel</ErrorCode><H

SharePoint 2013 搜索爬网功能

最近在政府部门介绍SharePoint 2013 新功能,我也准备了很多,比如SharePoint 2013的Search.以后有机会谈谈Office Web App,Workflow等. SharePoint 2013的搜索功能很强大,特别是在社交领域的搜索让我耳目一新(如发掘知识,发现人际关系等).如下所示是一个SharePoint 普通搜索,可以看到实现对Office的全文检索(当然还包含很多,比如PDF). 启用Search Service Application SharePoint

SharePoint 2013 开发——其他社交功能

博客地址:http://blog.csdn.net/FoxDave 上一篇讲了如何获取用户配置文件的相关属性,它属于SharePoint 2013社交功能的一个小的构成部分.社交功能是SharePoint 2013改进的一大亮点.可以在现有网站上开启社交功能或者新建一个专门用于社交用途的社区网站,社交功能包括关注(人或内容).艾特@.#等功能.有清晰的用户积分制度等等.由于工作中不会有太多关于这方面的开发需求,并且个人觉得这部分做得挺不错,基本的需求应该是够用了(强大的或许就不在SharePoi

SharePoint 2013 &quot;通知我&quot;功能简介

功能简介 "通知我"主要是在列表或者文档库里面的项目,有添加/删除/修改等操作,发送邮件通知设置的用户的功能:可以针对列表或者文档库设置通知,也可以针对单一项目设置通知功能,是SharePoint的一个Out Of Box的功能. 使用必须首先在管理中心设置传出邮件,然后确保用户的Email属性里有邮件地址,最后配置通知即可.下面简单介绍下通知服务的配置. 一.管理中心配置邮件服务 1.打开管理中心System Settings,找到配置传出邮件设置,如下图: 2.配置邮件服务器地址.

盘点SharePoint 2013那些优秀的开发工具

盘点SharePoint 2013那些优秀的开发工具 分类: SharePoint2014-07-18 20:33 277人阅读 评论(0) 收藏 举报 CAML Designer 2013 CAML Designer是帮助生成CAML查询以查询SharePoint列表的一种工具.可以说,目前没有比CAML Designer这样自动生成存根来生成CAML查询更有效的方式了. CAML Designer 2013较之前版本有很大改进,虽现在的功能并非十全十美,但仍无法阻止其成为该领域的最佳选择.它

SharePoint 2013 工作流设计之Designer 使用“可视化视图”

原文:SharePoint 2013 工作流设计之Designer 使用"可视化视图" SharePoint 2013增强了工作流功能,而Designer里面也添加了可视化设计视图,也就是类似Visio的设计视图(需要Visio 2013支持),下面我们简单介绍下,在可视化视图下,使用工作流. 1.创建列表工作流,选择“工作流测试列表”,如下图: 2.填写工作流名称,选择平台类型,这里我们选择SharePoint 2013 工作流: 3.选择“可视化设计器”视图,如下图: 特:需要安装