[SOLUCIONADO] Cambiar de la unidad dinamicamente

Buenas…

Los EF, como por ejemplo ef_editable_numero, tienen una propiedad denominada UNIDAD en donde se puede colocar un texto con la unidad que corresponde el número que el usuario carga. Lo que deseo poder hacer es modificar este texto por programación, intenté buscar un método dentro del API JavaScript y no lo encontré; mi pregunta es ¿existe un método con tal fin?, de no existir ¿cual sería el mejor camino para hacer lo que propongo?

La versión de toba es la 1.5.3, PHP 5.3.5

Desde ya muchas gracias

Saludos

José

Hola Jose,

la Unidad no existe como propiedad en el cliente, es un valor que se fija al momento de generar el HTML para el ef.
Por lo tanto para cambiarlo en el cliente lo unico que te queda es acceder al tag que lo contiene y tratando de no destruir el input del ef, modificar el texto.
En particular creo que deberias utilizar la funcion get_contenedor() para el ef en cuestion y luego navegar al segundo nodo hijo del mismo (DOM), ese es justo el tag que contiene el texto de la unidad.
Seria algo asi mira:


window.js_ci_1272.dep('formulario').ef('importe').get_contenedor().firstChild.nextSibling.firstChild.nextSibling.nodeValue = 'cronos';

Te recomiendo que te valgas de Firebug para ir viendo como estan organizados los elementos HTML para el ef en cuestion.

Saludos

Richard…

El código que escribí es :


var nodomuestra = this.ef('cantidad_muestra').get_contenedor();

nodomuestra.firstChild.nextSibling.firstChild.nextSibling.nodeValue = ' ' + datos['muestra']['unidad_medida'];

Esto funciona a la perfección en FF y Chrome, pero en IE8 no, directamente da error… se te ocurre alguna idea de como hacerlo viable en IE?

desde ya muchas gracias

José.

Buenas… yo otra vez…

Continué investigando y encontré la solución, por lo menos funciona en FF, Chrome e IE… aquí el código:


var nodomuestra = this.ef('cantidad_muestra').get_contenedor();
var nodoregistro = this.ef('valor_reg').get_contenedor();
			
if (navigator.appName.indexOf('Explorer') != -1) {
	var nodomuestra = nodomuestra.firstChild.lastChild;
	var nodoregistro = nodoregistro.firstChild.lastChild;
} else {
	var nodomuestra = nodomuestra.firstChild.nextSibling.firstChild.nextSibling;
	var nodoregistro = nodoregistro.firstChild.nextSibling.firstChild.nextSibling;
}

nodomuestra.nodeValue = ' ' + datos['muestra']['unidad_medida'];
nodoregistro.nodeValue = ' ' + datos['variable']['unidad_medida'];

No se si es el mejor camino, pero funciona… igualmente, si hay otra idea o forma mejor de hacerlo…

Saludos

José

Hola Jose,

me parece que mucha mejor forma de hacerlo no hay, supuestamente todos los browser son W3C compatibles a esta altura, bueno… todos excepto el de siempre xD.
Al menos hay forma de hacerlo tambien en IE, lo unico que podes cambiar si queres (a gusto propio!!) es la expresion del if, en basicos.js existen una serie de variables JS que indican de que browser se trata y que version (para el caso de versiones incompatibles entre si), por lo demas esta perfecto.

Saludos