Es muy raro la verdad ya que algunos options de un select no se desplazan normalmente. Y es muy raro todavía que los que no se desplazan son el option 1000 para arriba, en total son 1165 options..
no puedo mandar captura porque cada vez que quiero hacerlo se me cierra el select.. la cosa es que para que se pueda seleccionar del 1000 para arriba hay que hacer como un scroll en el select (el input) pero no se desplazan como debería.
?
¿Cual es tu problema?Y donde esta el codigo? Para que te pogamos ayudar tendrias que especificar más, y te recomiendo, que pongas el codigo para que veamos con detalle donde esta el fallo
Cita de: Drakaris en 29 Noviembre 2018, 17:53 PM
?
¿Cual es tu problema?Y donde esta el codigo? Para que te pogamos ayudar tendrias que especificar más, y te recomiendo, que pongas el codigo para que veamos con detalle donde esta el fallo
El sistema es así, vos tenes 2 selects uno para seleccionar el municipio y otro para seleccionar tu ciudad de residencia.
en el primer select, al seleccionar un municipio se van a poder ver las ciudades de dicho municipio en el segundo select. Entonces a medida que el usuario va cambiando de municipio desaparecen ciudades y reaparecen otras del municipio que se selecciono.
El sistema funciona correctamente hasta que se llega hasta el option 1000 de ciudades.
SELECT PARA SELECCIONAR TU MUNICIPIO:
<select class="input_registro_C select_registro_municipio" onchange="Change_Municipio(this.value)">
<?php
Options_Municipios();
?>
</select>
En la funcion de php de Options_Municipios() no hay mucho que mostrar simplemente tienen los options que son algo así... <option value="1">Nombre del municipio</option>
No los muestro porque son 173 y se les va a ser pesadisimo ver tantas lineas pero ya revise cada una y ninguna esta incorrecta. (estoy seguro que el error no pasa por ahí)
SELECT PARA SELECCIONAR CIUDADES
<select class="input_registro_C select_registro_ciudad" height="50px">
<?php
Options_Ciudades();
?>
</select>
Lo mismo son todos los options de las ciudades que tiene el sistema <option value="1">Nombre de la ciudad</option>
simplemente al cambiar o seleccionar un option determinado del select de municipios se van a ocultar o motrar determinadas ciudades
Con esta función se OCULTAN TODAS LAS CIUDADES QUE TENGA EL SISTEMA
function Ocultar_Ciudades()
{
var select_ciudad = document.querySelectorAll(".select_registro_ciudad");
var option_pc = select_ciudad[0].getElementsByTagName("option");
var option_movil = select_ciudad[1].getElementsByTagName("option");
var cant_option_pc = option_pc.length;
var cant_option_movil = option_movil.length;
option_pc[0].selected = true;
option_movil[0].selected = true;
for(var i = 1; i < cant_option_pc && i < cant_option_movil; i++)
{
option_pc[i].style.display = "none";
option_movil[i].style.display = "none";
}
}
AL CARGAR LA PAGINA VA A EJECUTARSE LO SIGUIENTE
// FORMULARIO UBICACIÓN
window.addEventListener('load', Reiniciar_Options_Ubicacion,false);
function Reiniciar_Options_Ubicacion()
{
Ocultar_Ciudades();
}
AL HACER CLICK EN UN DETERMINADO OPTION DE SELECT MUNICIPIOS PASARA ESTO..
function Change_Municipio(value)
{
if(value == 0)
{
Ocultar_Ciudades(); // Oculta todas las ciudades
}
else if(value == 1)
{
Ocultar_Ciudades(); // Oculta todas las ciudades
Mostrar_Ciudades_M1(); // Muestra las ciudades del Municipio 1 (Adolfo Alsina)
}
else if(value == 2)
{
Ocultar_Ciudades(); // Oculta todas las ciudades
Mostrar_Ciudades_M2(); // Muestra las ciudades del Municipio 2 (Adolfo Gonzales Chavez)
}
else if(value== X) // VA A PASAR ESTO HASTA EL 135 ya que son 135 municipios los cuales tienen varias ciudades, dando un total de unas 1170 ciudades aproximadamente
{
}
EL PROBLEMA SEGURAMENTE ESTE POR ACÁ:
function Mostrar_Ciudades_M119() // Mostrar ciudades del Municipio 119 (San Pedro)
{
var select_ciudad = document.querySelectorAll(".select_registro_ciudad");
var option_pc = select_ciudad[0].getElementsByTagName("option");
var option_movil = select_ciudad[1].getElementsByTagName("option");
for(var i = 991; i < 1022; i++)
{
option_pc[i].style.display = "block";
option_movil[i].style.display = "block";
}
}
function Mostrar_Ciudades_M120() // Mostrar ciudades del Municipio 120 (San Vicente)
{
var select_ciudad = document.querySelectorAll(".select_registro_ciudad");
var option_pc = select_ciudad[0].getElementsByTagName("option");
var option_movil = select_ciudad[1].getElementsByTagName("option");
for(var i = 1022; i < 1025; i++)
{
option_pc[i].style.display = "block";
option_movil[i].style.display = "block";
}
}
COMO PUEDEN VER.. EN LA SEGUNDA FUNCION YA ESTOY TRABAJANDO CON MAS DE 1000 OPTIONS EN UN SELECT PERO CUANDO TRATO DE HACER DISPLAY BLOCK.. SI SE MUESTRAN PERO CON EL ERROR QUE YA DIJE. QUE NO SE DESPLAZAN CORRECTAMENTE. SE DEFORMA DE ALGUNA MANERA EL SELECT.. ESTO SOLAMENTE CON ELEMENTOS QUE TENGAN option_pc[1001] o option_movil[1001] para moviles para arriba.
tambien pueden probar con este sencillo codigo que les dejo.. que pueden copiar y pegar en un nuevo archivo html si quieren para poder ver el error..
https://pastebin.com/T5xCE0yJ
Ala ala, ya podrías haber hecho más doble posts, hay una opción de editar. :xD
Cita de: z3nth10n en 29 Noviembre 2018, 20:56 PM
Ala ala, ya podrías haber hecho más doble posts, hay una opción de editar. :xD
No tiene sentido editar si el foro/sistema no me permite poner todos los caracteres del programa. es por eso que hice "doble post". Para que se pueda ver todo el código.
Amigo en ese caso, usa: https://pastebin.com/
Así se verá más limpio el mensaje que quieras postear. Usa varios pastebins si lo necesitas.
Un saludo. :P
https://pastebin.com/T5xCE0yJ
Pero muchacho, edita el trochimoche de arriba, y dile a algun mod que te edite dos doble posts. Si no, andamos en las mismas.
Así es imposible responderte bien.
Solo faltaría que llegase alguien y te citase la respuesta :xD (10 veces por lo menos)
Cita de: z3nth10n en 29 Noviembre 2018, 21:56 PM
Pero muchacho, edita el trochimoche de arriba, y dile a algun mod que te edite dos doble posts. Si no, andamos en las mismas.
Así es imposible responderte bien.
Solo faltaría que llegase alguien y te citase la respuesta :xD (10 veces por lo menos)
Ya esta, pero me encantaría que me dieras una respuesta relevante al tema.
Te puedo ayudar, pero realmente, se me hace muy espeso el tema (ya que no tengo como probar por mi cuenta lo que realmente está ocurriendo)
Mejor, sube todo tu codigo aquí:
https://jsfiddle.net/
Intenta representar con la mayor fidelidad posible el problema.
Y a ver. :P
Creo que ahí esta..
https://jsfiddle.net/o69dcx12/
si te fijas ahí aparece el select de como se vería, y esta deformado porque no aparecen las opciones a no ser que hagas scroll dentro del select
si al final no entendes lo que pasa o por qué del error comenta este tema diciendo que no sabes, así no sigo esperando una respuesta ;)
La verdad es que no he entendido muy bien cual es el problema... pero... te estas complicando demasiado. Por lo que veo de código que has expuesto, estas usando un select con literalmente miles de municipios. Eso es una carga muy pesada tanto para el servidor como para el navegador del cliente y muy poco práctico para futuras actualizaciones.
Yo te sugeriría que empieces a leer sobre lazy loading y peticiones AJAX. Te va a facilitar la vida y te ayudará a desarrollar aplicaciones fácilmente actualizables. El ejemplo que te muestro a continuación es muy básico con arrays en PHP, lo ideal seria utilizar base de datos pero bueno...
Codigo HTML
<select id='selectCuidades' data-tipo='cuidades'>
<option disabled selected>Seleccionar</option>
</select>
<select id='selectLocalidades' data-tipo='localidades'>
<option disabled selected>Seleccionar</option>
</select>
<script src='localidades.js'></script>
Codigo JS (localidades.js)
// Es mejor esperar a que este cargado todo el DOM.
document.addEventListener('DOMContentLoaded', function(e){
// Cargar la primera vez. En este caso cargaria las cuidades con indice
// 0 en $cuidades del PHP.
cargarOpciones('cuidades', 0, function(opciones){
pintarOpciones('selectCuidades', opciones);
});
// Cuando el select "selectCuidades" cambie, obtendra la cuidad selecionada
// su valor y realizara una consulta para obtener las localidades pertinentes
// a esa cuidad.
document.getElementById('selectCuidades').addEventListener('change', function(e){
var index = this.options[this.selectedIndex].value; // valor del elemento seleccionado
cargarOpciones('localidades', index, function(opciones){
pintarOpciones('selectLocalidades', opciones);
});
});
});
/**
* Hace un AJAX a un archivo PHP que le da las opciones para cada cuidad.
* Si le retorna un error, avisa de ello mediante alert.
*
* @param {string} tipo
* @param {integer} valor
* @param {function||object} callback
*/
var cargarOpciones = (function(tipo, valor, callback){
var url = 'localidades.php?tipo='+tipo+'&index='+valor;
var request = new XMLHttpRequest();
request.open('GET', url, true);
request.onload = function() {
if (request.status >= 200 && request.status < 400) {
var data = JSON.parse(request.responseText);
if(data.error) {
alert('No existen datos');
return false;
}
callback(data);
}
};
request.send();
});
/**
* Pinta los elementos que ha obtenido dentro de un select con el id indicado.
*
* @param {integer} idElemento
* @param {array} opciones
*/
var pintarOpciones = (function(idElemento, opciones){
var elemento = document.getElementById(idElemento);
elemento.innerHTML = '';
opciones.forEach(function(valor, index){
var opcion = document.createElement('option');
opcion.value = index;
opcion.innerText = valor;
elemento.appendChild(opcion);
});
});
Codigo PHP (localidades.php)
<?php
$cuidades = array(
0 => array(
0 => 'Adolfo Alsina',
1 => 'Adolfo González Chavez',
2 => 'Alberti',
)
);
$localidades = array(
0 => array( // El 0 representa el 0 de $cuidades (Adolfo Alsina)
0 => 'Carhué',
1 => 'Rivera',
2 => 'Villa Maza',
3 => 'San Miguel Arcángel',
4 => 'Esteban Agustín Gascón',
5 => 'Delfín Huergo',
6 => 'La Pala',
7 => 'Thames',
8 => 'Yutuyaco',
),
1 => array( // Lo mismo, representa el 1 de 1 de $cuidades (adolfo Gonzalez)
0 => 'Gonzáles Chaves',
1 => 'De la Garma',
2 => 'Juan Eulogio Barra',
3 => 'Vásquez',
),
2 => array( // etc...
0 => 'Alberti',
1 => 'Mechita',
2 => 'Villa Ortiz',
3 => 'Plá',
4 => 'Coronel Seguí',
5 => 'Villa Grisolía',
6 => 'Villa María',
7 => 'Gobernador Ugarte',
),
);
$tipo = $_GET['tipo']; // cuidades o localidades
$valor = (int) $_GET['index']; // esperamos un valor solo numerico
$resultado = array('error' => 'no encontrado'); // si no encuentra nada...
switch($tipo) {
case 'cuidades':
if (isset($cuidades[$valor])) {
$resultado = $cuidades[$valor];
}
break;
case 'localidades':
if (isset($localidades[$valor])) {
$resultado = $localidades[$valor];
}
break;
}
die(json_encode($resultado)); // imprimimos un JSON
?>
Esto incluso se puede simplificar aún más haciendo que PHP imprima los option en vez de crearlos con JS pero es mejor que los cree el propio navegador.
https://es.wikipedia.org/wiki/Lazy_loading
https://www.w3schools.com/xml/ajax_intro.asp
https://es.wikipedia.org/wiki/JSON
Saludos
Gracias amigo! voy a probar a ver que tal..