我有一个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是textArea):
Field.attachEvent("onchange", myFunction);
Field.addEventListener("onchange", myFunction, false);
Field.onchange = myFunction() {};
当我更改textArea nothings的内容时。当我使用IE开发人员调试工具时,“myFunction”永远不会被调用。我究竟做错了什么?我看过SPServices JQuery库,但似乎没有任何与javascript事件有关。
Doess任何人都有线索?
非常感谢。
答案 0 :(得分:1)
尝试使用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/
答案 1 :(得分:0)
选择新值时,下拉框会触发“onchange”事件。它不会为Textarea开火。在您的情况下,您可能需要检查KeyUp事件,例如Blur事件。
此外,您可能希望使用jQuery或其他库来处理事件。
答案 2 :(得分:0)
我发现完成此任务的唯一方法是通过计时器。看看这样的事情:
$(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');
}
然后在你的功能中你做你的常规逻辑。