2009-05-27 8 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 donc ce que j'ai ici est une fonction listerner de l'événement, le cas est lorsque viewInvitation est cliqué, le programme va chercher mon fichier xml et la fonction principale de la page d'exécution où je crée mon bouton de recul avec id = "declinebutton", cependant cela ne fonctionne pas, le message d'erreur que j'obtiens est obj = null ou le programme n'a pas pu trouver id = declinebutton, pourquoi est-ce le cas? Je l'ai créé quand j'ai appelé le maître de page en utilisant dom. toute aide serait appréciée.obj est nulle, 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);**/ 
} 

C'est ma fonction de page maître, et j'ai définitivement créé le bouton. mais ça ne marche pas.

Répondre

2

Essayez d'appeler votre fonction comme ceci:

window.onload=init; 

Le javascript fonctionne comme la page se charge. À ce stade, l'élément n'existe pas encore dans l'arborescence DOM. Vous devrez retarder le script jusqu'à ce que la page soit chargée.

+0

J'ai le body.onload = init(). mon programme pourrait charger le eventlistener, quand je clique sur l'invitation, il chargera heureusement la fonction maître de page, je ne pourrais pas cliquer le bouton de déclin dans le maître de page bien que je l'ai spécifié sur mon écouteur d'événement, l'erreur est . une idée? –

1

L'exemple que vous avez donné ne crée pas le bouton "Refuser", comme votre question le suggère. Si c'est le cas, vous pourriez vouloir regarder cela.

Bien sûr, si le bouton existe déjà, ne tenez pas compte de cette réponse.

+0

le bouton existe, mais il n'a pas pu être cliqué –

1

Vous avez un écouteur dans un écouteur. Est-ce correct?

Qu'en est-ce ?:

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

oui, je ne pouvais pas mettre l'auditeur en dehors de l'autre coz le bouton de déclin n'existe pas fondamentalement encore. il n'existe que lorsque l'on clique sur l'invitation à la vue. –

+0

hmm, cela ne fonctionne pas sur mon programme. –

1

Pour autant que je comprends, vous créez avec le bouton id = « declinebutton » pour chaque entrée de xml, est-ce pas? Si oui, je vous suggère de générer des ID différents pour chaque bouton (par exemple, ajouter l'index de ligne à 'declinebutton', donc vous avez les boutons 'declinebutton0', 'declinebutton1' etc.), et d'assigner un écouteur d'événement aux boutons séparément dans la boucle.