Newsgroup: it.comp.lang.javascript
Titolo: problema pagina faq

Ciao, ho una pagina in cui sono visualizzate delle faq;
quando clicca su una domanda delle faq viene visualizzata la risposta(con 
javascript).
Per� cliccando su una qualsiasi domanda viene visualizzata sempre la prima 
risposta
della prima domanda delle faq.
Potete aiutarmi? Forse � un problema del codice javascript.
Questo � il link:
http://www.misterjolly.com/faq/faq.php?category_id=6&cat_name=ASSISTENZA
Questo � il codice della pagina:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head>
 <td valign="top" width="50%" bgcolor="#FFFFFF"><img border="0" 
src="misterjolly-small.GIF" align="absmiddle" width="65" height="58">
            <font size="6" face="Verdana" color="#FF0000">Le FAQ di 
Misterjolly</font></td>
<?php
$print = isset($_GET['print']) ? $_GET['print'] : false;
$category_id = isset($_POST['category_id']) ? $_POST['category_id'] : 
$_GET['category_id'];
$cat_name = isset($_POST['cat_name']) ? $_POST['cat_name'] : 
$_GET['cat_name'];
$answer = isset($_POST['answer']) ? $_POST['answer'] : 0;
include "faq_config.php";
?>
<title><?php echo "$cat_name"; ?></title>
<META HTTP-EQUIV="expires" CONTENT="0"><META HTTP-EQUIV="Pragma" 
CONTENT="no-cache">
<link rel="stylesheet" type="text/css" href="style.css">
<style type="text/css">
a {
 text-decoration: none
 }
 </style>
<script language="JavaScript">
function submit_faq(){
var obj = document.getElementById("quest");
obj.submit();
}
var howManySeconds = 1
function pause() {
myTimer=setTimeout("whatToDo()",howManySeconds*1000)
}
function whatToDo() {
window.print()
}
</script>
</head>
<body <?php if ($print) { print "onload=\"pause()\""; } ?>>
<table width="100%" height="100%" border="0" cellpadding="0" 
cellspacing="0">   <tr> <td class="poptop" height="15"><img 
src="images/spacer.gif" width="3" height="3"></td>   </tr>   <tr> <td 
class="hrz_line"><img src="images/spacer.gif" width="1" height="1"></td> 
</tr>   <tr> <td style="background: #ffffff; padding: 5px" 
valign="middle"><h1 style="margin-top: 0; margin-bottom: 0"><?php echo 
"$cat_name" ?></h1></td>   </tr>   <tr> <td class="hrz_line"><img 
src="images/spacer.gif" width="1" height="1"></td>   </tr>   <tr> <td 
valign="top" style="padding: 1em" class="maincontent" height="400">
<p><?php echo $faq_instruct; ?></p> <p><a href="<?php echo 
"$PHP_SELF?print=true&cat_name=$cat_name&category_id=$category_id" ?>"><?php 
echo "$s_print_faq" ?></a></p>
<table width="100%" border="0" cellpadding="8" cellspacing="0">
<?php
$result = mysql_query("SELECT * FROM faqs WHERE category_id = 
'$category_id'") or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
if (($answer == "$row[id]") || ($print == "true")) {
print "<tr>                    <td class=\"QA\" valign=\"top\">Q </td>";
print "<form name=\"quest\" id=\"quest\" action=\"$PHP_SELF\" 
method=\"post\">\n";
print "<input type=\"hidden\" name=\"category_id\" 
value=\"$category_id\"></p>\n";
print "<input type=\"hidden\" name=\"cat_name\" value=\"$cat_name\">\n";
print "<input type=\"hidden\" name=\"answer\" value=\"0\">\n";
print "</form>\n<td><pre class=\"question\"><a 
href=\"javascript:submit_faq();\">$row[question]</a></pre>";
print "</td></tr>\n";
print "<tr> <td class=\"QA\" valign=\"top\">A</td>  <td><pre 
class=\"answer\">$row[answer]</pre>  <br>
<a 
href=\"$PHP_SELF?answer=0&cat_name=$cat_name&category_id=$category_id#$answer\">" 
. $s_close . "</a><br></td>   </tr>\n";
}
else {
print "<tr>  <td class=\"QA\" valign=\"top\">Q <a name=\"$row[id]\"></td> 
<td>";
print "<form name=\"quest\" id=\"quest\" action=\"$PHP_SELF\" 
method=\"post\">\n";
print "<input type=\"hidden\" name=\"category_id\" 
value=\"$category_id\"></p>\n";
print "<input type=\"hidden\" name=\"cat_name\" value=\"$cat_name\">\n";
print "<input type=\"hidden\" name=\"answer\" value=\"$row[id]\">\n";
print "</form>\n<pre class=\"question\"><a 
href=\"javascript:submit_faq();\">$row[question]</a></pre></td> 
</tr>\n";
}                                                       }
?>
  </table> </td>   </tr>   <tr> <td class="hrz_line">
  <img src="images/spacer.gif" width="1" height="1"></td>   </tr>   <tr> <td 
height="20" class="popbot">
  <a href="javascript:window.close()"><?php echo "$s_close"; ?></a></td>
  </tr></table></body></html> 

Minnozzi Corrado ha scritto:

separa html,css,javascript e php e se ne riparla.

 }
questa sopra è la function di submit: è questa che invia la richiesta per 
visualizzare la faq? Se sì: stai inviando sempre la stessa form, per 
forza ti visualizza sempre la stessa faq ...
Occorre rifare completamente il codice ragionando prima sulla logica.


-- 
"When you have eliminated the impossible, whatever remains, however
improbable, must be the truth."

 Potete aiutarmi? Forse � un problema del codice javascript.
Come ti � stato gi� detto, il codice � un po' un minestrone di roba. Son
presenti cose che non si utilizzano pi� da un decennio, oltre che errori
che non permettono alla pagina di funzionare correttamente.
Ad esempio, se vado sul tuo sito con FireFox e Safari, vedo gi� tutte le
risposte alle domande: non sono "invisibili". Immagino che tu abbia IE6,
o simile.
Stare qui a cercare di correggerti tutto sarebbe un lavoraccio, ti posso
solo suggerire il problema che non ti fa "funzionare" la cosa neanche su
IE, e suggerirti di leggere qualche tutorial circa XHTML, DOM e CSS.
Un esempio di link di una faq �:
<a href="#" onclick="visualizza('risposta'); return false">Ho completato 
la procedura di registrazione come faccio ad
attivarmi?</a>
Il problema � che TUTTE le tue risposte hanno come ID "risposta"..! :) E
quindi come fa javascript a capire, anche volendo, a quale riferirsi? Un
ID, come dice il nome, serve a "IDentificare" un elemento; e deve quindi
essere univoco. Non puoi assegnare lo stesso ID a pi� elementi.
Quello che ti fa il tuo browser in tal caso, e prendere per buono quello
che trova per primo e usarlo.
Ci� che ti suggerisco io � di ripulire il codice. A quel punto sfruttare
il codice ripulito per riferirsi all'elemento di risposta senza usare un
ID. Ti scrivo uno stralcio di esempio riprendendo il tuo codice:
<table>
<tbody>
	<tr>
		<td class="QA">Q</td>		
		<td class="question">
			<a href="nojs.htm" onclick="return viewAnswer(this)">
				Ho completato la procedura di registrazione come faccio ad attivarmi?
			</a>
		</td>
	</tr>
	<tr style="display: none">
		<td class="QA">A</td>
		<td class="answer">
			Sei gi� attivo come utente, puoi ...
		</td>
	</tr>
	<tr>
		<td class="QA">Q</td>		
		<td class="question">
			<a href="nojs.htm" onclick="return viewAnswer(this)">
				Ho i denti gialli, che posso fare?
			</a>
		</td>
	</tr>
	<tr style="display: none">
		<td class="QA">A</td>
		<td class="answer">
			Indossa una cravatta marrone.
		</td>
	</tr>
</tbody>
</table>
La funzione viewAnswer sar� qualcosa del tipo:
function viewAnswer(aLink) {
     var tr = aLink.parentNode.parentNode,
         answer = tr.parentNode.rows[tr.rowIndex + 1];
     answer.style.display = "";
     return false;
}
In pratica si sfrutta la "regola dei due", che "non ci pu� essere una
domanda senza risposta" (sebbene l'originale parlasse di Maestro e di
Allievo.. Chi coglie la citazione? :P); e che quindi a ogni riga dove
risiede una domanda, segue una riga dove risiede la risposta, sebbene
nascosta. La funzione non fa altro che ripristinare quindi il display
originale dell'elemento, togliendo il "none", rendendolo visibile.
Nota, che se non fosse stato per IE6, potevamo benissimo evitare quel
"link", spostando l'onclick sul TD e aggiungendo nel CSS l'effetto di
"hover" che hai nella pagina originale (per farlo su IE6, devi andare
ad aggiungere altri due event handler senza il link. Non mi pareva il
caso in questo contesto).
Spero che l'esempio ti sia anche utile per capire come poter ripulire
il tuo codice HTML, guardando le differenze tra i due. Ma davvero, ti
consiglio qualche lettura in merito all'argomento XHTML, CSS e DOM.
Su 
html.it
 ne trovi a bizzeffe in italiano (in inglese quanti ne vuoi
in tutto il web).
Hope it helps.
