Esconder bloco e Mostrar Bloco

Olá pessoal estou no meu primeiro sistema web com a ferramenta ScriptCase 6 e gostaria de compartilhar minha dúvida com vocês.

Eu tenho um formulário de cadastro de uma Estação de Trabalho com uns 180 campos e eu tenho alguns campos que eu vou escolher a quantidade de registros que vou adicionar ex:

No Bloco Placa Mãe eu tenho um o select Slots de Memória (1,2,3,4,5…), ai quando eu escolher a quantidade eu quero que me mostre os blocos de acordo com o número escolhido no select… Eu tenho todos esses campos no banco e já estão no formulário separados por blocos Memória 1, Memória 2, Memória 3…

Eu tenho uma ideia de como fazer porém eu não sei como eu chamo aquela divisão por blocos do formulário que tem no SC6.

Se alguém souber ou puder dar alguma dica, fico grato.

Primeiramente a Macro é para esconder blocos ou exibi-los é a sc_block_display.

Onde fazer isso no evento ajax onchange do campo cujo o valor vai interferir em quais blocos exibir ou esconder.

Na onload deve dar o mesmo tratamento para que os blocos se apresentem conforme a navegação nos registros.

vlw Haroldo, eu estava lendo a documentação ia postar aqui que tinha encontrado, e você já respondeu a minha segunda dúvida, então Obrigado.

sc_block_display

Permite, dinamicamente, exibir ou não os campos de um determinado bloco.

Em princípio, todos os blocos são exibidos (condição “on”).

Ex 1:
if ({tipo_cliente} == “fisica”)
{
sc_block_display(juridica, off);
}
else
{
sc_block_display(fisica, off);
}

Haroldo,

Eu fiz e funcionou direitinho e tal, mas quando eu fui criar um método para usar em outras aplicações eu encontrei uma barreira, a macro sc_block_display() creio eu que não aceita o nome do bloco como uma variável, ex.: sc_block_display($blocks, on);
Eu criei um array para pegar o nome dos campos e quando faço ($array[$i], on) a macro não funciona de jeito nenhum, e quando faço nome por nome ela funciona.

Não sei se errei em algum lugar eu testei bastante, se você ou alguém souber resolver, ficarei grato.

Obrigado.

Acho eu que a macro não interpreta a variável.

precisa ver o código gerado da macro sc_block_display, analisando ele da para ter certeza ou não se dá para usar o nome do bloco em variável, se não der com jquery da para resolver o caso.

Por enquanto eu vou continuar com os 1 milhão de IF, por que não posso parar o projeto para ajeitar isso, depois vou pensar em alguma função JQuery e posto aqui qualquer coisa que eu tenha criado, para ajudar se mais alguém tiver essa dúvida.

Obrigado aos 2.

Hoje a noite vou dar uma olhada nisso

http://infinitusweb.net.br/ftp/sc_201206142319_export_Publico.zip

Retorne por favor.

o valor do campo radio é passado com parâmetro para um método javascript que executa um jquery escondendo o bloco ou mostrando o mesmo.

campo radio:
Label: Bloco 1 valor: bloco_1
Label: Bloco 2 valor: bloco_2
Label: Bloco 3 valor: bloco_3

campo label_bloco1, label_bloco2, label_bloco3
Criar 4 blocos, radio no bloco inicial, e posicionar os demais campos nos outros blocos.

OnApplicationInit:

[_onoff]=array(); [_onoff]["bloco_1"]="block"; [_onoff]["bloco_2"]="block"; [_onoff]["bloco_3"]="block";

evento ajax onclick do radio:

[code]$id="div_hidden".{Radio_Blocos};

[_onoff][{Radio_Blocos}]=[_onoff][{Radio_Blocos}]==“block”?“none”:“block”;
$_onoff=[_onoff][{Radio_Blocos}];
sc_ajax_javascript(“DisplayBlock”, array($_id,$_onoff));

echo $_id." ".$_onoff;
[/code]

Método JavaScript: DisplayBlock(id,onoff)

if (onoff=='none') { $("#"+id).hide(); } else { $("#"+id).show(); }

Segue a demo:

http://iw.servehttp.com/sc/iw/app/Publico/iw_exemplos_esconder_bloco

Entendi Haroldo. Vou colocar em prática e postar o resultado.

Obrigado.

Ps.: A demo não abriu.

http://iw.servehttp.com/sc/iw/app/Publico/iw_exemplos_esconder_bloco

Funcionou… porém no meu caso é um pouco diferente, o cliente vai escolher o número de registros que ele vai fazer do mesmo item.

Ex.:

Eu tenho uma tabela de cadastro de servidores, na parte de cadastro da placa mãe, eu tenho o campo Nº de slots de memória, ai o cliente coloca 4, feito isso vai mostrar os blocos de 1 à 4, se forem 6 vai mostrar de 1 à 6, eu tenho de 1 até 10 no banco, ai no onChage do select eu fiz isto:

if ({EQP003_PMAE_MSLOT} == "1") {
    sc_block_display(bl_memo1, on);
    sc_block_display(bl_memo2, off);
    sc_block_display(bl_memo3, off);
    sc_block_display(bl_memo4, off);
    sc_block_display(bl_memo5, off);
    sc_block_display(bl_memo6, off);
    sc_block_display(bl_memo7, off);
    sc_block_display(bl_memo8, off);
}

Mas é pouco funcional fazer isso em tudo então eu tentei criar o método:

// Parametros
$cValor = {EQP003_PMAE_MSLOT};
$blocksNeed = array( // Blocos para parâmetro
								1=>'bl_memo1',
	                            2=>'bl_memo2',
	                            3=>'bl_memo3',
	                            4=>'bl_memo4',
	                            5=>'bl_memo5',
	                            6=>'bl_memo6',
	                            7=>'bl_memo7',	
								8=>'bl_memo8'
);

$range = count($blocksNeed);

// Método

for($i = 1; $i<=$range; $i++) {
	if ($i == $cValor) {
		sc_block_display($blocksNeed, on);
	    if ($i > 1) {
			for ($j = $i - 1;$j > 0; $j--) {
		        sc_block_display($blocksNeed[$j], on);
		    }
	    }
	}

Que basicamente criava um array fazia um if increase para verificar os valores, e quando fosse maior que 1 eu fazia um if decrease para ativas os blocos menores que X também.

Porém a macro não aceita variáveis, mas agora com esse código que você postou se funcionar no onChange eu creio que da pra fazer o que eu pensei.

Vlw Haroldo.

No seu post inicial eu entendi que precisava passar via variável o bloco que desejava esconder ou mostrar.

para este caso aqui o exemplo que criei funciona:

Sim sim, eu já estou implementando o seu exemplo no meu código… estou testando aqui.

Haroldo eis o que eu fiz:

// Digite o prefixo do blocos que deseja funcionar.
$prefix = "bl_slot";

// Defina os parametros
$indice = {EQP005_PMAE_MSLOT};
$nomeCampo = "EQP005_PMAE_MSLOT";

//Não alterar, variavel que pega id parcial do bloco.
$_id="div_hidden_".$prefix;

sc_ajax_javascript("DisplayBlock", array($_id,$indice,$nomeCampo));

E a DisplayBlock

var qdeOpcoes = $("#"+campo).size();
alert(id+indice);

for (var i = 0; i <= indice; i++) {
    if (indice > 1) {
		for (var j == i; j => 1; j--) {
			$("#"+id+j).show(); 
		}
	}
	else {
		$("#"+id+indice).show();
		for (var k = 1; k <= qdeOpcoes; k++) {
			$("#"+id+k).hide();
		}
	}
}

Eu não testei ainda porque o onChange estava dando um problema que ainda não identifiquei, e eu vou sair para almoçar agora. Mas creio que dará certo.

Vlw pela ajuda Haroldo.

Retorna aqui, para ficarmos por dentro.

A demo funcionou?

A demo funcionou sim Haroldo, agora eu to com um problema eu não estou conseguindo pegar a size do select, a quantidade de options que ele tem, esse código:

$("#"+campo).size();

Está retornando 0.

O nome do campo para a função JQuery é diferente?

vc precisa inspecionar com o chrome o id que a NM cria do campo select.