Pergunta

Como você verá, sou um novato em todas essas coisas de ajax, mas posso fazer um pouco de php, então optei pelo xajax para cuidar do javascript para mim.

Eu tenho uma matriz com itens listados em seções diferentes.Quero usar esse array para produzir uma lista não ordenada que se expanda quando alguém clica em uma seção.

Adaptei um script que encontrei aqui:

Desenhar Deslizante

Meu script atualmente está assim:

<?php

include ("xajax_core/xajax.inc.php");

$subs =     array(
        "Mortice" => array("Union Deadlock 2.5", "Union Deadlock 3",      "Union Sashlock 2.5", "Union Sashlock 3"),
        "Cylinders" => array("30/30 Euro", "30/40 Euro", "30/50 Euro", "30/60 Euro"),
        "uPVC" => array("30/92 Fullex", "35/92 Fullex", "Sash jammer")
        );

function addsub($show, $key)
{

$objResponse=new xajaxResponse();

if ($show=="true") {
    $objResponse->assign("list", "style.display", "block");
    $objResponse->replace("$key","innerHTML","true","false");
}
else {
    $objResponse->assign("list", "style.display", "none");
    $objResponse->replace("$key","innerHTML","false","true");
}

return $objResponse;
}

$xajax = new xajax();
$xajax->registerFunction("addsub");
$xajax->processRequest();

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php $xajax->printJavascript() ?>
<title>Expand menu test</title>
<style type="text/css">

.list {display: none;}

</style>
</head>

<body>

<?php
echo "<ul>\n";

foreach ($subs as $key => $group) {
echo "<li id=\"".$key."\" onClick=\"xajax_addsub('true','$key');\">".$key."\n";
echo "<ul class=\"list\" id=\"list\">\n";
    while (list($list, $each) = each($group)) {
        echo "<li id=\"list\">".$each."</li>\n";
        }
    echo "</ul>\n</li>\n";
}

echo "</ul>";


?>




</body>
</html>

A idéia é que quando um elemento é clicado, ele altera o estilo de exibição para bloquear (mostrando assim o resto da lista) e define a função como 'false', portanto, se for clicado novamente, ele mudará a exibição de volta para nenhum e ocultará o lista.

Escusado será dizer que não funciona, então se alguém pudesse me indicar o porquê, ficaria eternamente grato.

Saúde,

Usuario.

Resolvido - classifiquei colocando as listas a serem mostradas (ou ocultadas) em <divs> e atribuindo a cada um deles um ID exclusivo e definindo seu estilo como display:nenhum.Então eu só tive que fazer uma solicitação para definir o estilo como bloco quando ele fosse clicado.

Obrigado.

Foi útil?

Solução

Eu acho que você deveria investigar jQuery como sua biblioteca javascript padrão, é usada por muitos profissionais da web e é muito boa.Lá você encontrará o Acordeão controle, que acho que atenderá muito bem a essa necessidade.

Boa sorte!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top