Tengo un problema bastante raro, o bueno a mi me parece que asi es.
Tengo una aplicacion que permite mostrar departamentos y municipios, cada de partamento esta acompañado de un checkbox que al seleccionarlo muestra los municipios de ese departamento en un cuadro de dialogo, bueno eso funciona correctamente, el problema se presenta en el momento de seleccionar mas de un departamento...
Si selecciono un departamento se muestran sus municipios, despues que aparecen, puedo seleccionar los municipios que quiera enviar.
Si lo hiciera el estado en el cual quedarian los checkbox seria
Departamento 1 . true, true, true, false, false, false
Es como si tuviera seleccionado los 3 primeros y los 3 ultimos no.
El problema sucede cuando selecciono otro departamento, al parecer la seleccion de este hace que los municipios anteriores cambien de estado y todos queden en estado true
Si seleccionara el otro departamento quedaria asi
Departamento 1 . true, true, true, true, true, true
Departamento 2 . true, true, true, true, true, true
Si fuera que selecciona todos los municipios del departamento 2 quedaria asi, y pues cambia el estado de los departamento antes seleccionados, el codigo es el siguiente.
Código Javascript:
Ver original
$("input[id*='_chekear']").click( function() { if( $(this).attr("checked") ) { titulo = this.title; id_actual = this.id; id = id_actual.split("_"); agregarMunicipios( this.value ); $("#departamentos-municipios").ajaxStop( function() { $("#departamandosmMostrados").val("#" + id[ 0 ] + "_"); $("#" + id[ 0 ] + "_").css("display", "block"); $("#" + id[ 0 ] + "_" + " table tr td input[name*='municipios[]']").each( function() { $(this).attr("checked", true); } ) var dialogo = $('#departamentos-municipios').dialog({ autoOpen: true, show: 'fold', hide: 'drop', height : 400, width : 600, title : titulo, buttons: { Cancelar : function () { $(this).dialog('close'); codigoDepartamento = $("#departamandosmMostrados").val(); $( codigoDepartamento + " table tr td input[name*='municipios[]']").each( function() { $(this).attr("checked", false); }); $( codigoDepartamento + "chekear").attr("checked", false); }, Aceptar: function() { $(this).dialog('close'); $("#departamentos-municipios > div").each( function() { nombre_div = this.id; elementos = ""; $("#" + nombre_div + " tr td input[name='municipios[]']").each( function () { elementos += " " + $(this).attr("checked"); } ); info = $("#prueba").html(); $("#prueba").html( info + "<br /> Capa: " + nombre_div + " Elementos " + elementos); } ); } } }); dialogo.css("text-align", "left"); } ); } } );
Código Javascript:
Ver original
agregarMunicipios = function( departamentos ) { codigoDepartamento = departamentos; $.post("../ServletSeleccionarMunicipios", { "departamentos" : codigoDepartamento, "codDepartamento" : 0 }, function( data ) { $(data).find('municipios').each( function() { var $municipios = $(this); checkMunicipios = ""; codMunicipios = ""; nombreMunicipios = ""; codDepartamento = ""; $municipios.find("departamentos").each( function () { var $departamentos = $(this); $departamentos.find("municipio").each( function() { var $municipio = $(this); codDepartamento = $municipio.attr("departamento"); $municipio.find("codMunicipio").each( function( ) { codMunicipios += '-' + $(this).text(); }); $municipio.find("nombre").each( function( ) { nombreMunicipios += '-' + $(this).text(); }); } ); codMunicipios = codMunicipios.split("-"); nombreMunicipios = nombreMunicipios.split("-"); for( n = 1; n < codMunicipios.length; n++ ) { checkMunicipios += '<tr><td></td><td><input type="checkbox" name="municipios[]" value="' + codDepartamento + '_' + codMunicipios[ n ] + '" checked="checked"/>( '+ codMunicipios[ n ] +' ) '+ nombreMunicipios[ n ] + '</td></tr>'; } html = $('#departamentos-municipios').html(); if( ! ($('#' + codDepartamento + '_').is("div")) ) { $('#departamentos-municipios').html( html + "<div id='"+ codDepartamento +"_' style='display: none; border:0px solid #333'><table><tr><td colspan=\"2\"><input type=\"checkbox\" name=\"seleccionarMunicipios[]\" id=\""+ codDepartamento +"_seleccionarMunicipios\" title=\"municipios[]\" onclick=\"seleccionarTodosMunicipios(this.id)\" checked /><strong>Seleccionar Todos</strong></td></tr>"+ checkMunicipios +"</table></div>"); } checkMunicipios = ""; codMunicipios = ""; nombreMunicipios = ""; codDepartamento = ""; } ); } ); }); }
Creo que el error puede estar aqui
Código Javascript:
Ver original
checkMunicipios += '<tr><td></td><td><input type="checkbox" name="municipios[]" value="' + codDepartamento + '_' + codMunicipios[ n ] + '" checked="checked"/>( '+ codMunicipios[ n ] +' ) '+ nombreMunicipios[ n ] + '</td></tr>';
LES DEJO LA SOLCION
Código Javascript:
Ver original
if( ! ($('#' + codDepartamento + '_').is("div")) ) { $("<div id='"+ codDepartamento +"_' style='display: none; border:0px solid #333'><table><tr><td colspan=\"2\"><input type=\"checkbox\" name=\"seleccionarMunicipios[]\" id=\""+ codDepartamento +"_seleccionarMunicipios\" title=\"municipios[]\" onclick=\"seleccionarTodosMunicipios(this.id)\" checked /><strong>Seleccionar Todos</strong></td></tr>"+ checkMunicipios +"</table></div>").appendTo('#departamentos-municipios'); }
Era problema de concatenacion....