Foro

Problema con Combos Dependientes

0
Estimados,
actualmente estoy usando un combo dependiente que encontre navegando, y sucede que el load de los items se cargan en el mismo combo, estuve modificando el codigo pero no logro ordenarlo.
este es el codigo:
data_combo.php
<?php
header('Content-Type: text/html; charset=UTF-8'); 
include 'cnx_php.php';

mssql_select_db($database_obras, $link); 
$query_busqueda = "SELECT (CODIGO)CODIGO_SEGMENTO,SEGMENTO FROM SEGMENTOS ORDER BY CODIGO ASC"; 
$busqueda = mssql_query($query_busqueda, $link) or die(mssql_error()); 
$row_busqueda = mssql_fetch_assoc($busqueda); 
$totalRows_busqueda = mssql_num_rows($busqueda); 

$data = array();

if((empty($_POST['id1'])) and (empty($_POST['id2'])) and (empty($_POST['id3'])) and (empty($_POST['id4'])) and (empty($_POST['id5']))) { 
     
    $id = -1; 
     
    do {  //step 3 
        array_push($data,array( 
            "valor"        => $row_busqueda['CODIGO_SEGMENTO'], 
            "etiqueta"    => $row_busqueda['SEGMENTO'] 
        )); 
    } while($row_busqueda = mssql_fetch_assoc($busqueda)); 

} 

if(!empty($_POST['id1'])) { 
     
    mssql_select_db($database_obras, $link); 
    $query_busqueda = "SELECT DISTINCT(CODIGO)CODIGO_SERVICIO,SERVICIO FROM SERVICIO WHERE CODIGO_SEGMENTO = '".$_POST['id1']."'"; 
    $busqueda = mssql_query($query_busqueda, $link) or die(mssql_error()); 
    $row_busqueda = mssql_fetch_assoc($busqueda); 
    $totalRows_busqueda = mssql_num_rows($busqueda); 
     
    do {  //step 3 
        array_push($data,array( 
            "valor"        => $row_busqueda['CODIGO_SERVICIO'], 
            "etiqueta"    => $row_busqueda['SERVICIO'] 
        )); 
    } while($row_busqueda = mssql_fetch_assoc($busqueda)); 
     
} 

if(!empty($_POST['id2'])) { 
     
    mssql_select_db($database_obras, $link); 
    $query_busqueda = "SELECT DISTINCT * FROM `de_municipios`WHERE `CODIGO_SERVICIO` LIKE '".$_POST['id2']."'"; 
    $busqueda = mssql_query($query_busqueda, $link) or die(mssql_error()); 
    $row_busqueda = mssql_fetch_assoc($busqueda); 
    $totalRows_busqueda = mssql_num_rows($busqueda); 
     
    do {  //step 3 
        array_push($data,array( 
            "valor"        => $row_busqueda['codigomunicipio'], 
            "etiqueta"    => $row_busqueda['municipio'] 
        )); 
    } while($row_busqueda = mssql_fetch_assoc($busqueda)); 
     
} 

if(!empty($_POST['id3'])) { 
     
    mssql_select_db($database_obras, $link); 
    $query_busqueda = "SELECT * FROM `de_parroquias` WHERE `codigomunicipio` LIKE '".$_POST['id3']."'"; 
    $busqueda = mssql_query($query_busqueda, $link) or die(mssql_error()); 
    $row_busqueda = mssql_fetch_assoc($busqueda); 
    $totalRows_busqueda = mssql_num_rows($busqueda); 
     
    do {  //step 3 
        array_push($data,array( 
            "valor"        => $row_busqueda['codigoparroquia'], 
            "etiqueta"    => $row_busqueda['parroquia'] 
        )); 
    } while($row_busqueda = mssql_fetch_assoc($busqueda)); 
     
} 

echo json_encode(  //step 4 
    array( 
    "success"    => true, 
    "data"        => $data 
)); 

mssql_free_result($busqueda); 
?>
linked-cmb.js
Ext.ns("com.quizzpot.tutorial");

com.quizzpot.tutorial.LinkedComboBoxTutorial = {
    init: function () {
        //code here
        var datos_select = new Ext.data.Store({
            autoLoad: true,
            proxy: new Ext.data.HttpProxy({
                url: 'data_combo.php',
                method: 'POST'
            }),
            reader: new Ext.data.JsonReader({
                root: 'data'
            },[
			{name: 'valor'},
			{name: 'etiqueta'}
			])
        });

        var codigo_pais_fld = new Ext.form.ComboBox({
            mode: 'local',
            store: datos_select,
            displayField: 'etiqueta',
            valueField: 'valor',
            forceSelection: true,
            minChars: '1',
            fieldLabel: 'SEGMENTO',
            labelStyle: 'font-weight:bold;',
            typeAhead: true,
            hiddenName: 'codigo_pais_fld',
            triggerAction: 'all',
            emptyText: 'Seleccione País de la Obra...',
            selectOnFocus: true,
            forceSelection: false,
            id: 'codpais',
            name: 'codpais',
            editable: true,
            autoLoad: true,
            width: 200,
            allowBlank: false,
            selectOnFocus: true
        });

        var codigo_provincia_fld = new Ext.form.ComboBox({
            mode: 'local',
            store: datos_select,
            disabled: true,
            displayField: 'etiqueta',
            valueField: 'valor',
            fieldLabel: 'SERVICIO',
            typeAhead: true,
            hiddenName: 'codigo_provincia_fld',
            forceSelection: true,
            minChars: '1',
            triggerAction: 'all',
            emptyText: 'Seleccione Provincia...',
            selectOnFocus: true,
            forceSelection: false,
            labelStyle: 'font-weight:bold;',
            id: 'codprovincia',
            name: 'codprovincia',
            editable: true,
            autoLoad: true,
            width: 200,
            allowBlank: false,
            selectOnFocus: true
        });
		//combo 1
		codigo_pais_fld.on('select', function (cmb, record, index) {
            codigo_provincia_fld.enable();
            codigo_provincia_fld.clearValue();		
            datos_select.load({
                params: {
                    id1: record.get('valor')
                }
            });
        }, this);

        var codigo_municipios_fld = new Ext.form.ComboBox({
            mode: 'local',
            store: datos_select,
            displayField: 'etiqueta',
            valueField: 'valor',
            fieldLabel: 'PROVEEDORES',
            disabled: 'true',
            forceSelection: true,
            minChars: '1',
            typeAhead: true,
            hiddenName: 'codigo_municipios_fld',
            triggerAction: 'all',
            labelStyle: 'font-weight:bold;',
            emptyText: 'Seleccione Municipio...',
            selectOnFocus: true,
            forceSelection: false,
            id: 'codmunicipio',
            name: 'codmunicipio',
            editable: true,
            autoLoad: true,
            width: 200,
            allowBlank: false,
            selectOnFocus: true
        });
		//combo 2
        codigo_provincia_fld.on('select', function (cmb, record, index) {
            codigo_municipios_fld.enable();
            codigo_municipios_fld.clearValue();		
            datos_select.load({
                params: {
                    id2: record.get('valor')
                }
            });
        }, this);

        var codigo_parroquias_fld = new Ext.form.ComboBox({
            mode: 'local',
            store: datos_select,
            displayField: 'etiqueta',
            valueField: 'valor',
            fieldLabel: 'APLICATIVO',
            forceSelection: true,
            minChars: '1',
            typeAhead: true,
            hiddenName: 'codigo_parroquias_fld',
            labelStyle: 'font-weight:bold;',
            triggerAction: 'all',
            emptyText: 'Seleccione Parroquia...',
            selectOnFocus: true,
            forceSelection: false,
            disabled: 'true',
            id: 'codparroquia',
            name: 'codparroquia',
            editable: true,
            autoLoad: true,
            width: 200,
            allowBlank: false,
            selectOnFocus: true
        });		
		//combo 3
        codigo_municipios_fld.on('select', function (cmb, record, index) {
            codigo_parroquias_fld.enable();
            codigo_parroquias_fld.clearValue();		//MODIFICADO
            datos_select.load({
                params: {
                    id3: record.get('valor')
                }
            });
        }, this);
		
		

        this.window = new Ext.Window({
            title: 'ComboBox',
            layout: 'form',
            width: 400,
            height: 250,
            bodyStyle: 'padding:5px;background-color:#fff',
            items: [codigo_pais_fld, codigo_provincia_fld, codigo_municipios_fld, codigo_parroquias_fld]
        });
        this.window.show();
    }
}

Ext.onReady(com.quizzpot.tutorial.LinkedComboBoxTutorial.init, com.quizzpot.tutorial.LinkedComboBoxTutorial);
agradezco mucho su ayuda.... :)
0
Sucede que estas usando el mismo store (datos_select) para los 3 combos, por lo tanto cuando modificas el contenido del store (haciendo el load) los 3 combos se modifican, la solución es crear stores diferentes para cada combo.

Saludos

¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook

Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.