2009-05-26 8 views
0
var subjectList; 

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 
*/ 

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 (var 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" 

     tableRow = table.insertRow(0); 
     tableCell = tableRow.insertCell(0); 

     var cellContent = ""; 

     //create invitation message 
     var invitationMsg = "<p>Subject : " + subjectNum + " - " + subjectName + "</p>"; 
     invitationMsg += "<p>You are invited to join " + groupName + " (groupId : " + groupId + ") by owner Id:" + ownerId + "</p>"; 
     cellContent += invitationMsg; 

     //create buttons 
     cellContent += "<input type='button' id='acceptButton" + i + "' value='Accept' onclick='acceptInvitation(i)'>" 
     cellContent += "<input type='button' id='declineButton" + i + "' value='Decline'>" 

     tableCell.innerHTML = cellContent; 

     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 acceptInvitation(i) 
{ 
    alert("hello"); 
    //alert(subjectList[i].attributes[0].nodeValue); 
} 

ci-dessus est extrait de mon code javascript. Ce que le code fait est de créer une table de groupe invitant du dossier de xml avec le bouton d'acceptation et de baisse. Lorsque l'utilisateur appuie sur Accepter, la table disparaît et le tableau ci-dessous monte. Pour l'instant, je ne fais que tester mon bouton d'invitation pour voir si cela fonctionne.Mais ma fonction onclick dans le bouton d'acceptation ne fonctionne pas pour une raison que je ne comprends pas. l'alerte contenue dans acceptInvitation() n'est pas lue. Toute aide serait appréciée. Mercil'événement onclick ne se déclenche pas

+0

essayez le débogage en utilisant le navigateur firefox et installez un add-on firebug cela vous permet de voir facilement la ligne sur laquelle le code se casse (où les erreurs se produisent) – lock

Répondre

0

Essayez de l'appeler comme ça

onclick='acceptInvitation();' 

pas comme ça

onclick='acceptInvitation(i)' 
2

Qu'en est-:

cellContent += "[...] onclick='acceptInvitation("+i+")'>" 

Cela garantit que i est évaluée à la valeur de la variable au lieu de littéralement

+0

merci, ne réalisant pas que je pouvais le faire de cette façon. En passant, j'utilise la méthode inlining pour l'événement onclick, est-ce que maintenant vous pouvez utiliser eventlistener mais toujours être capable de passer la valeur de "i" donc quelque chose comme. triggerLink = document.getElementById ("accepter"); triggerLink.addEventListener ("click", (nom de la fonction), false); Mais il semble qu'il n'y ait aucun moyen d'inclure le "i" –

0

alors peut-être pas faire face au problème central,

onclick='acceptInvitation(i)' 

dans ce cas i serait indéfinie.

onclick='acceptInvitation("+i+")' 

résoudrait au moins un problème. En outre, vous utilisez un mélange inhabituel de méthodes innerHTML et DOM. Pourquoi ne pas s'en tenir aux méthodes DOM et utiliser attachEvent/AddEventListener?

modifier: Une liste a part un bon article sur la liaison des variables à http://www.alistapart.com/articles/getoutbindingsituations/

Ce qui suit est un exemple un peu spécialisé. Voir l'article pour le cas plus général (ou utiliser une bibliothèque comme Prototype)

var click_hdlr = function() { 
    return function() { 
     return acceptInvitation.apply(this,arguments); 
    } 
} 

var acc_btn = document.createElement("input"); 
acc_btn.setAttribute("type","button"); 
acc_btn.setAttribute("id","accept"); 
acc_btn.setAttribute("value","Accept"); 
acc_btn.addEventListener("click",click_hdlr(i),false); 
+0

qui est ce que je veux faire plus tôt, bien en fait je dois utiliser eventListener, mais pour ce cas je ne sais pas comment passer le "i". Une idée sur la façon de faire cela? Comment puis-je utiliser eventListener mais toujours être en mesure de passer le "i" –

+0

dois-je mettre le click_hdlr à l'intérieur de ma fonction de boucle for? Je suis nouveau à javascript et n'a appris que depuis environ une semaine, donc pas tout à fait sûr de le faire correctement. merci pour l'aide –

+0

Désolé, j'aurais dû préciser, il n'a pas besoin d'être à l'intérieur de la boucle for. –

0

ne sais pas si c'est ce qui cause votre problème, mais votre sortie onclick = « accepterInvitation (i) » Im devine que vous voulez afficher accepterInvitation (valeur -of-i), c'est acceptInvitation ("+ i +")

Questions connexes