SharePoint 2007联系Web部件中的状态指示器菜单问题

时间:2011-03-28 09:38:32

标签: sharepoint sharepoint-2007

当我在页面上添加多个联系人Web部件时,我遇到了sharepoint 2007中的状态指示器问题。

我注意到,当添加多个联系人时,我总是会出现灰色气泡,因此我在互联网上搜索了一个解决方案。有人发现img标签(存在指标气泡)的ID不应该是唯一的。因为SharePoint会自动将静态ID添加到我需要覆盖ID的img标记中。所以我写了这个javascript代码(实际上复制了guid函数; - )):

function S4() 
{
    return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
function guid() {
   return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
window.IMNRC = function(native) {
   return function(name, elem) {
       if(elem != null)
       {
       if(elem.id="contact_im,type=sip")
       {
           elem.id = guid();
       }
    }
    native(name, elem);    
    }
 }(window.IMNRC);

我不知道它是不是很好的代码,但是当我将它添加到页面时,气泡显示了联系人的良好存在。 我现在唯一的问题是菜单不起作用。当我将鼠标悬停在状态指示器上时,它会变为灰色,菜单中的所有链接都不起作用。

我的一位同事注意到,当他在场景指示器上方盘旋时,出现了一个带有联系人姓名的工具提示。奇怪的是这个名字与联系人不匹配。当他刷新时,他注意到工具提示中的名字随机变化。所以我认为这与我玩img标签的ID有关。

所以现在我有两个选择: - 或者我需要重新开始并且不要弄乱img标签上的ID,并找到存在指示器问题的另一种解决方案 - 或者我需要解决菜单问题。

有人可以帮助我解决这两个问题吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

从纯粹的Javascript角度来看,立即突出的一点是:

if(elem.id="contact_im,type=sip")

应该是:

if(elem.id=="contact_im,type=sip")

这可能就是为什么你的身份证特别奇怪(他们被分配而不是比较)。

答案 1 :(得分:1)

好的,我得到了它的工作:-)。 感谢Stuart修复了我的JavaScript代码,我能够解决我的问题。 修复后菜单问题消失了,但是当我刷新页面时我仍然遇到问题。链接到状态指示符的名称不再与Web部件中的联系人匹配。我注意到名字在完全相反的方向。我注意到我试图覆盖的IMNRC函数被另一个执行此操作的函数调用:

function QueuePopulateIMNRC(sipAddress, element)
{
    setTimeout("IMNRC('" + sipAddress + "', document.getElementById('" + element.id + "'));", 100);
}

其中element.id是旧元素。我曾经读过JavaScript只记得重复名称时的最后一个对象,所以我认为这个方法调用导致错误的名称错误。我只需要覆盖QueuePopulateIMNRC函数,以便此时(在document.getelementbyid之前)更改我的状态指示器的ID。

这是我的最终解决方案:

function S4() {
    return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
function guid() {
    return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
function QueuePopulateIMNRC(sipAddress, element)
{
    if(element!=null)
    {
        if(element.id=="contact_im,type=sip")
        {
            element.setAttribute('id',guid());
        }
    }
    setTimeout("IMNRC('" + sipAddress + "', document.getElementById('" + element.id + "'));", 100);
}

如果您在隐藏的内容编辑器webpart中或直接在母版页中添加此代码,则在添加多个联系人Web部件时,状态指示符将起作用。