onChange: uso de javascript para cambios dinamicos en formularios

419 views
Skip to first unread message

Germana Oliveira

unread,
Aug 4, 2009, 11:18:46 AM8/4/09
to symfony-es
Estoy intentando hacer que me muestre algo diferente cuando selecciono
alo en un combo...

Primero tengo un formulario predefinido, entonces cuando selecciono algo
diferente en un combo determinado deberia cambiar el DIV 'denunciante'..
pero me da el siguiente error en javascript:

Error: Form is not defined
Archivo Fuente: http://indepabis/intranet_dev.php/denuncia/new
Línea: 191

Esto es en HTML:

<script type="text/javascript">
//<![CDATA[
new
Form.Element.EventObserver("denuncia[denunciantes][tipo_persona_id]",
function(element, value) {new Ajax.Updater('denunciante',
'/intranet_dev.php/denuncia/changeTipoPersona', {asynchronous:true,
evalScripts:false, parameters:'id=' + value });});
//]]>
</script>


ahora, mi funcion es esta:

> <?php use_helper('Javascript'); ?>
> <?php echo observe_field('denuncia[denunciantes][tipo_persona_id]', array(
> 'update' => 'denunciante',
> 'url' => 'denuncia/changeTipoPersona',
> 'with' => "'id=' + value ",
> ))
> ?>


GRACIAS

rocaloru

unread,
Aug 4, 2009, 11:49:30 AM8/4/09
to symfony-es
ya te fijaste si realmente esta cargando la libreria prototype???.....
si no la esta cargando puedes ejecutar lo siguiente

symfony plugin:publish-assets.

Espero te funcione...suerte

Germana Oliveira

unread,
Aug 4, 2009, 1:20:57 PM8/4/09
to symfony-es
hice lo que dijiste y me da el siguiente error ahora:

Error: element is null
Archivo Fuente: http://indepabis/sfPrototypePlugin/js/prototype.js
Línea: 3517

esto al cargar la pagina que contiene el javascript.

el error se refiere exactamente a:

getValue: function(element) {
element = $(element);
var method = element.tagName.toLowerCase();
return Form.Element.Serializers[method](element);


GRACIAS

_________________________________________________________________________
ya te fijaste si realmente esta cargando la libreria prototype???.....
si no la esta cargando puedes ejecutar lo siguiente

symfony plugin:publish-assets.

Espero te funcione...suerte

On 4 ago, 08:18, Germana Oliveira <germanaolivei...@gmail.com> wrote:

rocaloru

unread,
Aug 4, 2009, 3:59:25 PM8/4/09
to symfony-es
estas seguro que ese es el di del combo "denuncia[denunciantes]
[tipo_persona_id]", por que yo tengo implementado el observe_field y
funciona a la perfeccion......otra situacion podria ser si estas
utilizando otra libreria como jquery o motools a lo mejor este
causando conflicto.......

Germana Oliveira

unread,
Aug 4, 2009, 4:04:14 PM8/4/09
to symfony-es
No , no estoy usando otra libreria...

resulta que el combo al que hago referencia esta en un formulario
embebido.. aunque colocando solo tipo_persona_id me da el mismo error...

Seria mucha molestia, que colocaras tu codigo?

Gracias!!!
_______________________________________________________________________
estas seguro que ese es el di del combo "denuncia[denunciantes]
[tipo_persona_id]", por que yo tengo implementado el observe_field y
funciona a la perfeccion......otra situacion podria ser si estas
utilizando otra libreria como jquery o motools a lo mejor este
causando conflicto.......

On 4 ago, 10:20, Germana Oliveira <germanaolivei...@gmail.com> wrote:

Germana Oliveira

unread,
Aug 4, 2009, 4:37:45 PM8/4/09
to symfony-es
Ok!!!!!

ya no me da el error!!

anterior :S pero si otro:

Catchable fatal error: Object of class sfWebRequest could not be
converted to string in
/home/germana/www/indepabis/lib/model/om/BasePersonaPeer.php on line 2172

Resulta que lo que quiero es cambiar el formulario embebido... por lo
que la funciona a la que accedo en mi action es la siguiente:

public function executeChangeTipoPersona($param)
{
$tipo_persona = PersonaPeer::retrieveByPk($param);

if($tipo_persona->getName() == 'Natural')
{
$formField = new PersonaNaturalForm();
$this->partial = 'natural';
}
elseif($tipo_persona->getName() == 'Juridica')
{
$formField = new PersonaJuridicaForm();
$this->partial = 'juridica';
}

return $formField;
}

y el Template, parte de el (lo que deberia cambiar), es el siguiente:

> <tr><th colspan="2" class="rojo"><label>Denunciante</label></td></tr>
> <div id="denunciante">
> <?php if($partial): ?>
> <?php include_partial('custom/'.$partial.'_field', array('formField'=>$form['denunciante'])); ?>
> <?php endif; ?>
> </div>


Imagino que debo tener muchos errores, pues de verdad no logro entender
como retorna la cuestion symfony... alguna sugerencia?

GRACIAS


__________________________________________________________________________
No , no estoy usando otra libreria...

resulta que el combo al que hago referencia esta en un formulario
embebido.. aunque colocando solo tipo_persona_id me da el mismo error...

Seria mucha molestia, que colocaras tu codigo?

Gracias!!!
_______________________________________________________________________
estas seguro que ese es el di del combo "denuncia[denunciantes]
[tipo_persona_id]", por que yo tengo implementado el observe_field y
funciona a la perfeccion......otra situacion podria ser si estas
utilizando otra libreria como jquery o motools a lo mejor este
causando conflicto.......

On 4 ago, 10:20, Germana Oliveira <germanaolivei...@gmail.com> wrote:

Germana Oliveira

unread,
Aug 4, 2009, 4:55:53 PM8/4/09
to symfony-es
Ok!!!

Resulta que el problema es el siguiente:

The template "%s" does not exist or is unreadable.

Esto es obvio porque la funcion en el action es la siguiente:

public function executeChangeTipoPersona($param)
{
$tipo_persona = PersonaPeer::retrieveByPk($param);

if($tipo_persona->getName() == 'Natural')
{
$formField = new PersonaNaturalForm();
$this->partial = 'natural';
}
elseif($tipo_persona->getName() == 'Juridica')
{
$formField = new PersonaJuridicaForm();
$this->partial = 'juridica';
}

return $formField;
}

y lo que quiero es reemplazar el formulario existente en Template,
especificamente en:

<tr><th colspan="2" class="rojo"><label>Denunciante</label></td></tr>
<div id="denunciante">
<?php if($partial): ?>
<?php include_partial('custom/'.$partial.'_field',
array('formField'=>$form['denunciante'])); ?>
<?php endif; ?>
</div>

es decir quiero cambier de formulario y el partial igualmente debe cambiar..

GRACIAS

Germana Oliveira

unread,
Aug 4, 2009, 5:43:37 PM8/4/09
to symfony-es
LOGRE HACER QUE CAMBIARA... pero no en el lugar que deberia.

estos son los cambio que hice:

public function executeChangeTipoPersona(sfWebRequest $request)
{
$this->tipo_persona =
TipoPersonaPeer::retrieveByPk($request->getParameter('id'));

if($this->tipo_persona->getNombre() == 'Natural')
{
$persona = new PersonaNaturalForm();
}
elseif($this->tipo_persona->getNombre() == 'Juridica')
{
$persona = new PersonaJuridicaForm();
}

$this->form = new DenunciaForm();
return $this->form->embedForm('denunciante', $persona);
}


tengo mi Template segun la action:

<?php if($tipo_persona->getNombre() == 'Natural'): ?>
<?php include_partial('custom/natural_field',

array('formField'=>$form['denunciante'])); ?>
<?php endif; ?>

<?php if($tipo_persona->getNombre() == 'Juridica'): ?>
<?php include_partial('custom/juridica_field',

array('formField'=>$form['denunciante'])); ?>
<?php endif; ?>

ahora el problema es que en realidad no 'borra' el formulario original...

anexo un pantallazo.

se supone que el formulario que aparece arriba y desordenado deberia
reemplazar al formulario que esta donde dice 'Denunciante'..

aqui esta el DIV donde deberia hacer el update:

<div id="denunciante">
<?php include_partial('custom/natural_field',

array('formField'=>$form['denunciante'])); ?>

</div>


y la funcion javascript:

<?php use_helper('Javascript'); ?>

<?php echo observe_field('denuncia_denunciante_tipo_persona_id', array(


'update' => 'denunciante',
'url' => 'denuncia/changeTipoPersona',
'with' => "'id=' + value ",
))
?>


alguna idea.?

GRACIAS
_________________________________________________________________

Pantallazo.png

Fernando Toledo

unread,
Aug 7, 2009, 9:14:09 AM8/7/09
to symfo...@googlegroups.com
estas seguro que el id de tu campo es :

denuncia[denunciantes][tipo_persona_id] ??

--
Dock Sud BBS
http://bbs.docksud.com.ar
telnet://bbs.docksud.com.ar

signature.asc
Reply all
Reply to author
Forward
0 new messages