SharePoint添加Javascript事件到editForm.aspx页面



我有一个Sharepoint列表,我想自定义editForm。

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

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事件相关。

有人知道吗?

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

<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/

当您选择新值时,"onchange"事件将由下拉框触发。它不会为Textarea触发。在您的情况下,您可能想要检查KeyUp事件,例如,或Blur事件。

也可以使用jQuery或其他库来处理事件

我发现实现这一点的唯一方法是通过计时器。看看这样的代码:

$(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');
}

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

相关内容

  • 没有找到相关文章

最新更新