2009-05-27 6 views
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(); 
     }); 
    }); 

ok so, was ich hier habe, ist ein Ereignis listerner Funktion, der Fall ist, wenn viewInvitation angeklickt wird, wird das Programm meine XML-Datei holen und ausführen Seite Master-Funktion, wo ich mit meiner Rückgang Taste erstellt id = "ablehnen", aber das funktioniert nicht, die Fehlermeldung, die ich bekomme, ist obj = null oder das Programm konnte nicht finden id = ablehnen, warum ist es so? Ich habe es erstellt, als ich den Seitenmaster mit Dom angerufen habe. jede Hilfe wird geschätzt.obj ist null, javascript

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);**/ 
} 

Das ist meine Seite Master-Funktion, und ich habe definitiv die Schaltfläche erstellt. aber es funktioniert nicht.

Antwort

2

Versuchen Sie, Ihre Funktion wie folgt aufrufen:

window.onload=init; 

Die Javascript läuft als die Seite geladen wird. Zu diesem Zeitpunkt ist das Element noch nicht in der DOM-Struktur vorhanden. Sie müssen das Skript verzögern, bis die Seite geladen wurde.

+0

Ich habe do body.onload = init(). Mein Programm könnte den Eventlistener laden, wenn ich auf die Ansichtseinladung klicke, wird die Seitenmasterfunktion glücklich geladen. Ich konnte nicht auf die Abneigungsschaltfläche im Seitenmaster klicken, obwohl ich sie in meinem Ereignislistener angegeben habe. Der Fehler ist "obj is null". . irgendeine Idee? –

1

Das Beispiel, das Sie gaben, erstellt nicht die Schaltfläche "Ablehnen", wie Ihre Frage es empfiehlt. Wenn es sollte, sollten Sie sich das ansehen.

Natürlich, wenn Sie die Taste bereits vorhanden ist, ignorieren Sie bitte diese Antwort.

+0

der Knopf existiert, aber es konnte nicht geklickt werden –

1

Sie haben einen Listener in einem Listener. Ist das richtig?

Was ist das ?:

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();   
}); 
+0

ja, ich konnte den Hörer nicht außerhalb der anderen coz setzen, der Abneigung-Knopf ist im Grunde noch nicht vorhanden. Es existiert nur, wenn auf die Ansichtseinladung geklickt wird. –

+0

hmm, das funktioniert bei meinem Programm nicht. –

1

Soweit ich verstehe, Sie erstellen Schaltfläche mit id = „declinebutton“ für jeden Eintrag von xml, ist das richtig? Wenn ja, würde ich vorschlagen, dass Sie für jede Schaltfläche unterschiedliche IDs generieren (z. B. Zeilenindex an "ablehnen" anhängen, also Schaltflächen "ablehnenbutton0", "ablehnenbutton1" usw.) und Ereignislistener den Schaltflächen zuweisen getrennt in der Schleife.

Verwandte Themen