【问题标题】:SharePoint add Javascript event to a editForm.aspx pageSharePoint 将 Javascript 事件添加到 editForm.aspx 页面
【发布时间】:2013-06-04 18:31:26
【问题描述】:

我有一个 Sharepoint 列表,我想在其中使用 Javascript 自定义 editForm.aspx 页面。

问题是我无法向该页面中的控件添加任何事件。我可以使用此代码获得对我的控件的引用:

var textarea1;
var objForm = document.forms[0];
function FindField() {
    var title;
    title= $().SPServices.SPGetDisplayFromStatic({ listName: "MyList", columnStaticName: "mycolumn" });
    textarea1 = ChooseFieldByTitle("TextField", title);
}

function ChooseFieldByTitle(TypeField, title) {
    var elem;
    for (idx = 0; idx < objForm.elements.length; idx++) {
        elem = objForm.elements[idx];

        if (elem.id.indexOf(TypeField) != -1 &&
        elem.title == title) {
            return elem;
        }
    }

    return null;
};

这运行良好,但我无法在此控件上附加任何事件。我尝试了以下代码(字段是 textArea):

 Field.attachEvent("onchange", myFunction);
 Field.addEventListener("onchange", myFunction, false);
Field.onchange = myFunction() {};

当我更改 textArea 的内容时,什么都没有发生。当我使用 IE 开发人员工具进行调试时,永远不会调用“myFunction”。我究竟做错了什么?我查看了 SPServices JQuery 库,但似乎与 Javascript 事件无关。

有人知道吗?

【问题讨论】:

    标签: javascript jquery sharepoint event-handling dom-events


    【解决方案1】:

    尝试使用Jquery,这是一个使用很多的Javascript库。例如,它使选择对象更容易。如果您想将它与 spservices(或其他库)结合使用,请在您的 aspx 页面中 PlaceHolderMain 下添加以下行:

    <asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">
    <script language="javascript" type="text/javascript" src="/SiteAssets/js/jquery-1.9.0.js"></script>
    <script language="javascript" type="text/javascript" src="/SiteAssets/js/jquery.SPServices-0.7.2.min.js"></script>
    <script language="javascript" type="text/javascript" src="/SiteAssets/js/myjavascriptfile.js"></script>
    

    然后您可以通过 jquery 选择页面上的对象并立即绑定到事件,例如:

    $(":input[title$='atitleofsomefield']").keyup(function() {                  
                      // do stuff               
                })
    

    这里是 Jquery 事件列表:http://api.jquery.com/category/events/

    【讨论】:

      【解决方案2】:

      当您选择一个新值时,下拉框会触发“onchange”事件。它不会为 Textarea 触发。在您的情况下,您可能需要检查 KeyUp 事件或 Blur 事件。

      此外,您可能希望使用 jQuery 或其他库来处理事件。

      【讨论】:

      • 我也试过 onkeypress 但它不起作用。我也去看看 onKeyUp 谢谢
      【解决方案3】:

      我发现完成此操作的唯一方法是通过计时器。看看这样的东西:

      $(document).ready(function() { 
          var initialValue = undefined;
          Field.on('change', function(){
              //If the value has changed, run the function
              if(initialValue==undefined || Field.val()!=initialValue){
                  initialValue = Field.val();
                  myFunction();
              });
          //Reinitialize the timer 
          checkForChange();
      });
      //Timer function to throw the 'changed' event
      function checkForChange() {
          setTimeout(triggerChange, 1500);
      }
      //Send the changed event for Field
      function triggerChange(){
          Field.trigger('change');
      }
      

      然后在你的函数中执行你的常规逻辑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-21
        • 1970-01-01
        • 1970-01-01
        • 2012-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-06
        相关资源
        最近更新 更多