obj是null,javascript

时间:2009-05-27 05:18:27

标签: javascript

function init()

{

alert("init()");
    /**
     * Adds an event listener to onclick event on the start button.
     */
     xbEvent.addEventListener(document.getElementById("viewInvitation"), "click", function()
    {
        new Ajax().sendRequest("31260xml/invitations.xml", null, new PageMaster());

         xbEvent.addEventListener(document.getElementById("declinebutton"), "click", function ()
        {
           declineInvitation();
        });
     });

好吧所以我这里有一个事件listerner函数,例如,当点击viewInvitation时,程序将获取我的xml文件并运行页面主函数,我创建了我的拒绝按钮,其中id =“declinebutton”,但这不起作用,我得到的错误消息是obj = null或程序找不到id = declinebutton,为什么会这样?当我使用dom调用page master时,我创建了它。任何帮助将不胜感激。

function PageMaster()
{
    this.contentDiv = document.getElementById("content");
}

/**
 * Builds the main part of the web page based on the given XML document object
 *
 * @param {Object} xmlDoc   the given XML document object
 */
var subjectList;
var i;

PageMaster.prototype.doIt = function(xmlDoc)
{
    alert("PageMaster()");

alert("Clear page...");
this.contentDiv.innerHTML = "";

if (null != xmlDoc) 
{
    alert("Build page...");

    //create div Post
    var divPost = document.createElement("div");
    divPost.className = "post";

    //create h1 element
    var h1Element = document.createElement("h1");
    var headingText = document.createTextNode("Invitations");
    h1Element.appendChild(headingText);

    //insert h1 element into div post
    divPost.appendChild(h1Element);

    subjectList = xmlDoc.getElementsByTagName("subject");   
    var groupList = xmlDoc.getElementsByTagName("group");

    for (i = 0; i < subjectList.length; i++) //for each subject
    {
        var divEntry = document.createElement("div");
        divEntry.className = "entry";

        var subjectNum = subjectList[i].attributes[0].nodeValue;
        var subjectName = subjectList[i].attributes[1].nodeValue;
        var groupId = groupList[i].attributes[0].nodeValue;
        var groupName = groupList[i].attributes[1].nodeValue;
        var ownerId = groupList[i].attributes[2].nodeValue;

        //set up the invitation table attributes    


        var table=document.createElement("table");
        table.width = 411;
        table.border = 3;
        table.borderColor = "#990000"

        var input=document.createElement("p");
        var inputText=document.createTextNode("You are invited to join " + groupName + "(groupId : " + groupId +")");
        input.className="style11";
        var blank=document.createElement("nbps");
        input.appendChild(inputText);

        var acceptButton=document.createElement("input");
        acceptButton.type="button";
        acceptButton.id="acceptbutton";
        acceptButton.value="accept";

        var declineButton=document.createElement("input");
        declineButton.type="button";
        declineButton.id="declinebutton";
        declineButton.value="decline";

        table.appendChild(input);
        table.appendChild(acceptButton);
        table.appendChild(declineButton);
        divEntry.appendChild(table);

        var blankSpace = document.createElement("p");
        divEntry.appendChild(blankSpace);
        divPost.appendChild(divEntry);
    }

    //insert div post into div content
    this.contentDiv.appendChild(divPost);
    }
};

/**function getValueOf()
{
    return i;
}**/
function declineInvitation()
{
    alert("decline");
}
function acceptInvitation()
{
    alert("hello");
    /**var pos=getValueOf();
    alert(subjectList[pos].attributes[0].nodeValue);**/
}

这是我的页面主要功能,我肯定已经创建了按钮。但它不起作用。

4 个答案:

答案 0 :(得分:2)

尝试按照以下方式调用您的函数:

window.onload=init;

javascript在页面加载时运行。此时,该元素尚未存在于DOM树中。您需要延迟脚本,直到页面加载完毕。

答案 1 :(得分:1)

您提供的示例不会创建“拒绝”按钮,因为您的问题表明它应该。如果它应该,你可能想看看。

当然,如果该按钮已存在,请忽略此答案。

答案 2 :(得分:1)

您在侦听器中有一个侦听器。是吗?

这个怎么样?:

function init(){

alert("init()");

/**     * Adds an event listener to onclick event on the start button.     */
xbEvent.addEventListener(document.getElementById("viewInvitation"), "click", function()    
{        
     new Ajax().sendRequest("31260xml/invitations.xml", null, new PageMaster());
}

xbEvent.addEventListener(document.getElementById("declinebutton"), "click", function ()        
{                   
      declineInvitation();        
});

答案 3 :(得分:1)

据我了解,你为xml的每个条目创建了一个id =“declinebutton”的按钮,是吗? 如果是的话,我建议你为每个按钮生成不同的id(例如,将行索引附加到'declinebutton',所以你有按钮'declinebutton0','declinebutton1'等等),并分别为按钮分配事件监听器在循环中。