coldfusion свързването е неуспешно при използване на модала на jquery

Здравейте, имам cfoutput за цикъл на заявка и използвам динамични променливи за показване на оформлението от страна на клиента, всички работят добре, с изключение на обвързването, което работи само когато не използвам модала на jquery.

това е моят код за coldfusion

<cfoutput query = "RSSelect.rs">
<div id="editar_#idu_programa_detalle#" title="Editar">
<table>
    <tr>
        <td align="right" valign="middle">Estado:</td>
        <td align="left" valign="middle">
            <cfselect 
                title="id_Estado" 
                selected="#RSSelect.RS.idu_estado_salida#" 
                id="idu_estado_salida_#idu_programa_detalle#" 
                name="idu_estado_salida_#idu_programa_detalle#" 
                query="RSEstados.RS" 
                display="nb_Estado" 
                value="id_Estado" 
                queryPosition="below" 
                style="width:200px" 
                required="yes" 
                message="El estado es requerido" 
            >
                <option value="0" >Seleccione estado  </option>
            </cfselect>&nbsp;&nbsp;
        </td>
        <td align="left" valign="middle">Ciudad:
            <cfselect 
                title="Seleccione ciudad" 
                selected="#RSSelect.RS.idu_ciudad_salida#" 
                name="idu_ciudad_salida_#idu_programa_detalle#" 
                id="idu_ciudad_salida_#idu_programa_detalle#" 
                bind="cfc:#Application.CfcPath#.solicitudes_cm_uo.obtenerCiudades({idu_estado_salida_#idu_programa_detalle#@change})" 
                bindonload="yes"  
                value="id_Ciudad" 
                display="nb_Ciudad" 
                queryPosition="below"  
                style="width:200px" 
                required="yes" 
                message="El campo ciudad no debe de quedar vacio"
            >
            </cfselect>
        </td>
    </tr>
</table>
</div>
</cfoutput>

и jquery код

<link rel="stylesheet" href="/bg../css/smoothness/jquery-ui.css" />
    <script src="../js/jquery-1.9.1.js"></script>
    <script src="../js/jquery-ui.js"></script>
    <cfoutput query = "RSSelect.rs">
        <script>
            $(function()
            {
                $( "##editar_#idu_programa_detalle#" ).dialog(
                {
                    modal:true,
                    autoOpen: false,
                    height:999,
                    width:999,
                    buttons:
                    {
                        "Editar": function()
                        {
                            alert('se edito correctamente');
                            $( this ).dialog( "close" );
                        },
                        "Cancelar": function()
                        {
                            alert('se cancelo correctamente');
                            $( this ).dialog( "close" );
                        }
                    }
                });
            });
        </script>
        </cfoutput>

Ще се радвам на вашата помощ.

Опитах се да използвам и showmodaldialog, но работи само в IE

всякакви други опции, използващи модален диалог, биха били ок.


person Cloud1988    schedule 04.11.2013    source източник
comment
Ще помогне, ако покажете HTML, генериран от ColdFusion.   -  person Tomalak    schedule 04.11.2013
comment
Кой инструмент за разработчици на браузър използвате, за да отстраните това?   -  person Dan Bracuk    schedule 04.11.2013
comment
ако знаете jQuery, горещо препоръчвам да не използвате cfselect или cfform.   -  person Matt Busche    schedule 04.11.2013
comment
Имам нужда от cfselect и cfform, за да направя обвързването, и съм нов както в jquery, така и в coldfusion.   -  person Cloud1988    schedule 04.11.2013
comment
Вие не се нуждаете от cfselect и cfform, за да извършите обвързването - можете да го направите с jQuery, а правенето му с jQuery ще ви даде значително повече контрол над него и ще го направи много по-малко вероятно да влезе в конфликт. (Изучаването на jQuery също е по-полезно умение и нещо, с което има по-голям брой хора, които могат да помогнат при отстраняване на грешки.)   -  person Peter Boughton    schedule 04.11.2013
comment
Съжалявам, че питам отново, но нямам достъп до интернет за работата си, но как попълвам друга селекция, след като първата се промени, използвам coldfusion обвързване, за да извикам функция, но не знам как да направя това с помощта на jquery.   -  person Cloud1988    schedule 04.11.2013
comment
Публикуването в Stackoverflow без достъп до интернет е доста добър трик.   -  person Dan Bracuk    schedule 04.11.2013
comment
Не използвах мобилния си телефон като модем   -  person Cloud1988    schedule 05.11.2013


Отговори (2)


Изглежда, че вашият jQuery код се съдържа в заглавката на вашия HTML документ. Разбира се, вашият CFML се съдържа в тялото на вашия HTML документ. Когато използвате jQuery, трябва да внимавате да имате достъп до елементи в DOM само когато са налични. Можете да предотвратите някои от тези проблеми, като обвиете своя jQuery код във функцията $(document).ready(). Нещо като това...

<cfoutput query = "RSSelect.rs">
    <script>
        $(document).ready(function()
        {
            $( "##editar_#idu_programa_detalle#" ).dialog(
            {
                modal:true,
                autoOpen: false,
                height:999,
                width:999,
                buttons:
                {
                    "Editar": function()
                    {
                        alert('se edito correctamente');
                        $( this ).dialog( "close" );
                    },
                    "Cancelar": function()
                    {
                        alert('se cancelo correctamente');
                        $( this ).dialog( "close" );
                    }
                }
            });
        });
    </script>
</cfoutput>

Ето документацията за функцията ready().


Първоначален проблем, който след това е коригиран във въпроса

Не съм сигурен дали това е проблемът, но вашите <div> тагове не са позиционирани правилно. Отварящият таг <div> е в блока <cfoutput>...

<cfoutput query = "RSSelect.rs">
<div id="editar_#idu_programa_detalle#" title="Editar">

но затварящият таг е след </cfoutput> и следователно извън цикъла...

</cfoutput>
</div>

Затварящият таг </div> трябва да бъде в блока cfoutput, така че всеки отворен div също да бъде затворен...

</div>
</cfoutput>
person Miguel-F    schedule 04.11.2013
comment
Изрязах кода, за да се съсредоточа върху проблема, но в оригиналния код затварящият ‹/div› код е вътре в ‹/cfoutput›, проблемът е, че обвързванията се провалят, когато се използва модалът на jquery, но когато коментирам jquery кода, той работи , но имам нужда от модала. - person Cloud1988; 04.11.2013
comment
Къде е вашият jQuery код по отношение на вашия изходен код на ColdFusion? Може да се наложи да обвиете всичките си jQuery функции в $(document).ready(), за да сте сигурни, че елементите, които препращате, съществуват в DOM. - person Miguel-F; 04.11.2013
comment
свързването се проваля при използване на модала на jquery Какво означава това? Получавате ли грешка? Избраните не се попълват с данни? Имаме нужда от повече подробности. Проверете вашата javascript конзола за грешки във вашия браузър. Какво виждаш? - person Miguel-F; 04.11.2013
comment
появяват се сигнали, казващи. свързване на неуспешен елемент не е намерен: idu_estado_salida_6 свързване на неуспешен елемент не е намерен: idu_estado_salida_7 свързване на неуспешен елемент не е намерен: idu_estado_salida_8 и т.н. - person Cloud1988; 04.11.2013
comment
Тъй като кодът, който сте публикували тук, не е действителният код, който се проваля, е трудно да се разбере проблемът. Както Томалак предложи малко след като зададохте този въпрос, ще трябва да прегледате генерирания изход на клиентската машина (вижте изходния код), за да видите какъв е проблемът. Ако вашият cfselect код работи без jQuery, тогава бих предложил да добавите jQuery кода обратно към кода си един по един елемент, докато откриете какво нарушава другия код. Например, вземете работния си код и след това просто добавете jQuery включва. Вашият код прекъсва ли се? Ако не, опитайте повече и тествайте. и т.н. - person Miguel-F; 04.11.2013
comment
Благодаря, намерих друг начин да го реша. Ще го публикувам след малко. - person Cloud1988; 05.11.2013

По принцип извикване на функция за отваряне на модалния диалог.

Е, мисля, че кодирах твърде много, но ето го =).

<script language="javascript">
function OpenPop(idu_programa,idu_programa_detalle)
{
    var x = false;
    //alert('algo');
    x = showModalDialog('pop_editar_detalle_supervision.cfm?idu_programa='+idu_programa+'&idu_programa_detalle='+idu_programa_detalle,'dialogHeight:1000px;dialogWidth:1000px;');
    if (typeof x == 'undefined')
    {
        alert('Edicion cancelada');
    }
    else
    {
        document.getElementById('idu_programa_detalle_pop').value = idu_programa_detalle
        document.getElementById('idu_estado_salida_pop').value = x[0];
        document.getElementById('idu_ciudad_salida_pop').value = x[1];
        document.getElementById('fec_salida_pop').value = x[2];
        document.getElementById('opc_meridiano_salida_pop').value = x[3];
        document.getElementById('fec_supervision_inicial_pop').value = x[4];
        document.getElementById('fec_supervision_final_pop').value = x[5];
        document.getElementById('opc_meridiano_supervision_inicio_pop').value = x[6];
        document.getElementById('form1').submit();
    }       
}
</script>

След това върнах стойностите в масив, след което поставих стойностите на скрити входове, за да ги извикам след изпращане

Ето модалния javascript код, който връща масива.

<script language="javascript">
function Editar()
{
    var valoresDevueltos = new Array();
    valoresDevueltos[0] = document.getElementById('idu_estado_salida').value;
    valoresDevueltos[1] = document.getElementById('idu_ciudad_salida').value;
    valoresDevueltos[2] = document.getElementById('fec_salida').value;
    if(document.getElementById('amSalida').checked)
    {
        valoresDevueltos[3] = document.getElementById('amSalida').value;
    }
    else
    {
        valoresDevueltos[3] = document.getElementById('pmSalida').value;
    }
    valoresDevueltos[4] = document.getElementById('fec_supervision_inicial').value;
    valoresDevueltos[5] = document.getElementById('fec_supervision_final').value;
    //Checking which radioButton is checked
    if(document.getElementById('amSupervision').checked)
    {
        valoresDevueltos[6] = document.getElementById('amSupervision').value;
    }
    else
    {
        valoresDevueltos[6] = document.getElementById('pmSupervision').value;
    }
    window.returnValue = valoresDevueltos;
    window.close();
}
</script>

Надявам се, че е достатъчно ясно, ако не, уведомете ме, за да подобря отговора си, благодаря ви за търпението =)

person Cloud1988    schedule 05.11.2013