jQuery Alert在HTML中工作,在添加到SharePoint CEWP时无法正常工作

时间:2011-12-14 20:02:21

标签: jquery sharepoint sharepoint-2007

它适用于我的小提琴http://jsfiddle.net/JustJill54/XFaaG/11/,但是当我向CEWP添加jQuery代码时却没有。 (仅供参考。我只是在CEWP中使用jQuery来进行概念验证。) 只有当我在小提琴的结果中查看src时才有区别,Window.Load()事件就在那里,所以我尝试将该事件添加到我的CEWP中,但警报仍然不起作用。

此处来自CEWP的代码

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
$(window).load(function(){

$(document).ready(function() {
    $("tr.reqDet").hide();
    $("tr.anon").hide();
    $("tr.actDet").hide();

    // Attach to the focusout event of the select, if that's when
    // you want to check the value
    $("select[title='organizationalElement']").focusout(function() {
        // Now see if it's the value you want
        if ($(this).val() === 'idk') {
            alert("If no organizational element is selected, additional time may be required to route this request");
        } //close if
    $("select[title='requestType']").change(function() {
        $(".reqDet").toggle($(this).val() !== "");
    }); //close requestType
    $("select[title='anonymous']").change(function() {
        $(".anon").toggle();
    }); //close anonymous
    $("select[title='action']").change(function() {
        $(".actDet").toggle($(this).val() !== "");
    }); //close action
    }); //close select.focusout
}); //close doc.ready
}); //close window.load
</script>

更新:我已经注释掉了我的所有逻辑,只是试图在页面加载时显示AN警告,但仍然无法让它工作。

UPDATE2:我创建了一个与我的SharePoint页面具有相同控件的.html页面,并添加了jQuery脚本以在页面加载时显示警报,甚至那个工作正常,但带有SharePoint的.aspx页面:FormField控件不起作用

UPDATE3:我引用了一个javascript教程并修改了我的脚本。主要区别在于NOT EQUAL运算符已更改为!=而我已注释掉Window.load事件。这是我修改过的脚本:

//$(window).load(function(){

$(document).ready(function(){

    $("tr.reqDet").hide();
    $("tr.anon").hide();
    $("tr.actDet").hide();

    $("select[title='organizationalElement']").focusout(function() {

        if ($(this).val() === 'idk') {
            alert("If no organizational element is selected, additional time may be required to route this request");
        } // close if

    $("select[title='requestType']").change(function() {
        $(".reqDet").toggle($(this).val() != "");
    }); //close requestType.change

    $("select[title='anonymous']").change(function(){
      $(".anon").toggle();
    }); //close anonymous.change

    $("select[title='action']").change(function(){
        $(".actDet").toggle($(this).val()!= "");
    }); // close action.change

    });//close select.focusout

}); // close doc.ready
//}); // close window.load

UPDATE4:我使用了firebug来获取选择器的val,并意识到它没有返回&#39; idk&#39; (根据SP&#39的列表项的值来指定),但是返回&#34;我不知道&#34;代替。这提出了另一个问题/提醒我,我将需要逃避撇号(&#39;)。无论如何,仍在解决问题...

UPDATE5:@ Janis-我无法在firebug的脚本选项卡上看到我的脚本...所以我猜这意味着它没有被执行。

顺便说一句。这是UPDATE4之后脚本的状态。

$(window).load(function(){

$(document).ready(function(){

    $("tr.reqDet").hide();
    $("tr.anon").hide();
    $("tr.actDet").hide();

    $("select[title='organizationalElement']").focusout(function() {

        if ($(this).val() === "I don\'t know") {
            alert("If no organizational element is selected, additional time may be required to route this request");
        } // close if

    $("select[title='requestType']").change(function() {
        $(".reqDet").toggle($(this).val() != "");
    }); //close requestType.change

    $("select[title='anonymous']").change(function(){
      $(".anon").toggle();
    }); //close anonymous.change

    $("select[title='action']").change(function(){
        $(".actDet").toggle($(this).val()!= "");
    }); // close action.change

    });//close select.focusout

}); // close doc.ready
}); // close window.load

知道为什么吗?我以为我正在使用总是被调用的非常一般的事件(doc.ready,window.load)。

UPDATE6:Geez ......最后!猜猜第六次的魅力。我绝对会让每个人都知道对我有用的东西.... 无论如何,修改后的脚本如下:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
<script type="text/javascript"> 
$(window).load(function(){  
  $(document).ready(function(){      
     $("tr.reqDet").hide();     
     $("tr.anon").hide();     
     $("tr.actDet").hide();      
   $("select[title='organizationalElement']").focusout(function() {          
     if ($(this).val() === "I don\'t know") {             
        alert("If no organizational element is selected, additional time may be required to route this request");         
     } // close if      
      $("select[title='requestType']").change(function() {         
        $(".reqDet").toggle($(this).val() != "");     
      }); //close requestType.change      
      $("select[title='anonymous']").change(function(){       
        $(".anon").toggle();     
      }); //close anonymous.change      
      $("select[title='action']").change(function(){         
        $(".actDet").toggle($(this).val()!= "");     
      }); // close action.change      
   });//close select.focusout  
  }); // close doc.ready 
}); // close window.load 
</script>

我没有直接粘贴到CEWP中,而是将其作为.js文件上传到我创建的名为SiteAssets的文件夹(如果我们迁移到SPD2010),并通过CEWP调用所述文件... js&#39;的内容链接。使用firebug验证正在加载的脚本。

所以,我已经了解了一些关于在我的SP页面中让这个jQuery脚本为我工作的事情 -

  1. 不要假设您知道返回的是什么 - 使用firebug的控制台选项卡获取结果
  2. 检查语法
  3. 即使在... js文件中引用jQuery代码,也要确保它启动w / requisite tags,o.w。您最终可能会将脚本作为文本插入页面底部 希望这可以帮助!

3 个答案:

答案 0 :(得分:1)

尝试将上述脚本添加到文本文件中并将其保存在文档库中。然后编辑CEWP并在参考链接中添加脚本文件的URL。如果代码直接输入CEWP,SharePoint喜欢剥离/销毁代码。

答案 1 :(得分:1)

  1. 尝试查看源代码,看看是否成功引用了jQuery 您的代码实际上就在那里。
  2. 此外,您可以使用Firebug或chrome等调试工具 检查员或Internet Explorer开发人员工具,如果愿意,并设置断点以查看代码是否实际执行,是否存在任何阻止其执行的错误。如果你不知道如何使用它们,那么学习它们,将会有很长的路要走,节省时间来调试这些问题。

答案 2 :(得分:0)

只需检查你的小提琴,找到那里,你正在做一个window.load魔法,但只是删除它!

 $(window).load(function(){

我已经在你的小提琴和我的测试SharePoint中尝试过它,它可以工作。只需删除该行及其结束标记。}

*不确定这会产生魔力,但它适用于我,应该为你做*