簡體   English   中英

SharePoint 將 Javascript 事件添加到 editForm.aspx 頁面

[英]SharePoint add Javascript event to a editForm.aspx page

我有一個 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;
};

這運行良好,但我無法在此控件上附加任何事件。 我嘗試了以下代碼(字段是文本區域):

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

當我更改 textArea 的內容時,什么也沒有發生。 當我使用 IE 開發人員工具進行調試時,從未調用過“myFunction”。 我究竟做錯了什么? 我查看了 SPServices JQuery 庫,但似乎與 Javascript 事件無關。

有人有線索嗎?

嘗試使用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/

當您選擇一個新值時,下拉框會觸發“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');
}

然后在您的函數中執行常規邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM