Variables de Javascript en ColdFusion

Tengo una función JS que crea una variable basada en lo que el usuario selecciona de la lista desplegable. Necesito usar esa variable JS en mi código CF para poder usarla en operaciones que no sean enviar el formulario.

Esta es mi función JS

function handleProcedureChange(procedureid,recID)
    {
        procedureid= document.form1.procedure.value;
        recID = document.form1.recID.value;
        state = document.form1.state.value;
        state = state.trim();
        city = document.form1.city.value;
        city = city.trim();

        var url ="../../../../cf_modules/components/customDescriptions.cfc?method=procedureDescription&"; 
        url=url+"ProcedureID="+procedureid+"&recID=" + recID + "&state=" + state + "&city="+city;

        $.get(url, function(procedureResult) {
             procedureResult = procedureResult.replace(/^"+|"+$/g, "");
            $("#procedureDescription").text(procedureResult);
        });


    }

y este es mi formulario

      <select name="procedure" onChange="handleProcedureChange();">
            <option value="">Select Procedure</option>
            <cfloop query="procedures">
                <option value="#procedureId#">#procedureName#</option> 
            </cfloop>
        </select>   

 <textarea name="procedureDescription" id="procedureDescription" cols="80" rows="6"></textarea><br />

Necesito usar el url2 variable en este enlace que controla un par de funciones del lado del servidor

Estas son las secuencias de enlaces.

<cfoutput>[<a href="cityEdit.cfm?recID=#recID#&delete1=#recID#&state=#state#&city=#city.getCity()#&procedureid=#procedure#">delete</a>]</cfoutput>

<cfif delete1 neq "">
    Are you sure?
<cfoutput> [ <a href="cityEdit.cfm?recID=#recID#&delete1=#delete1#&delete2=#delete1#&procedureid=#procedure#&state=#state#&city=#city.getCity()#">Yes</a>&nbsp;|&nbsp;<a href="cityEdit.cfm?recID=#recID#">No</a>]</cfoutput>
</cfif>

y estas son las funciones que controlan los enlaces anteriores:

<cfparam name="delete1" default="">
<cfparam name="delete2" default="">


<cfif delete1 neq "">
            <cfquery name="procFinder" datasource="#ds#">
                select * from psp_customDescriptions where recID = '#delete1#'
                and procedureID = '#procedure#' and city = '#city#' and state='#state#'
            </cfquery>


        </cfif>

        <cfif delete2 neq "">
            <cfquery name="deletepractice" datasource="#ds#">
                delete from psp_customDescriptions where recID = '#delete2#'
                 and procedureID = '#procedure#' and city = '#city#' and state='#state#'
            </cfquery>

            <cflocation url="cityEdit.cfm?recID=#recID#" addtoken="no">
        </cfif> 

preguntado el 22 de mayo de 12 a las 16:05

una vez que se hace clic en ese enlace, estarán disponibles en el URL alcance en ColdFuison. ¿Responde esto a tu pregunta? ¿O desea publicar esa var en CF a través de AJAX en segundo plano? -

Supongo que tendré que publicar eso en CF a través de AJAX:

la forma más fácil sería usando <cfajaxproxy> y envíe la variable en JSON a través de AJAX. Si conoce jQuery, también puede usar jQuery. Simplemente publique eso en un .cfm esperando eso url2 variable en JSON, o a un método remoto. -

3 Respuestas

¿Qué hay de mover la lógica para que se ejecute cuando se hace clic en el enlace? También podría considerar usar algo como jQuery para obtener valores y configurar controladores de eventos. Como se mencionó, debe considerar usar una publicación para modificar/eliminar datos.

<script>
function handleDeleteLink()
{
    procedureid= document.form1.procedure.value;
    recID = document.form1.recID.value;
    state = document.form1.state.value;
    state = state.trim();
    city = document.form1.city.value;
    city = city.trim();

var url2 ="ProcedureID="+procedureid+"&recID=" + recID + "&state=" + state + "&city="+city;

    document.deleteLink.href="cityEdit.cfm?"+url2;
    }
</script>    

<a id="deleteLink" href="#" onclick="">Delete</a>

contestado el 22 de mayo de 12 a las 17:05

Solo estaba tratando de recordar cómo hacer eso en lugar de solo una ubicación. - marca un kruger

También querrá tener en cuenta algún tipo de respaldo si el usuario no tiene JavaScript... Sé que es una ocurrencia rara, pero codifique para lo peor. - dave largo

No estoy seguro de tu pregunta. En la superficie parece obvio. Si alguien hace clic en el enlace de arriba... el que dice:

cityEdit.cfm?recid=123&delete1=123&procedureid=345....

Las variables se pasarán a ColdFusion en el ámbito "URL". Entonces tendrás:

<Cfoutput>
#url.recid#
#url.delete1#
#url.procedureID#
</cfoutput>

Eso responde tu pregunta?


Si su pregunta es sobre el lado JS, entonces necesita una función como resultado de su enlace. En lugar de "cityedit.cfm" como su enlace, agregaría un oyente o un controlador de clics para que cuando el usuario haga clic en eliminar, active su función JS. Luego, dentro de la función JS, crearía su URL y haría un documento.href.ubicación para 'cityEdit.cfm?' + url2;

¿Es eso lo que querías decir?

FYI: pro forma, debería estar haciendo un POST para actualizar los datos en su base de datos, especialmente "eliminar". Es un poco más a prueba de fallas (y se ajusta a W3C).

contestado el 22 de mayo de 12 a las 16:05

Bueno, mi problema es que no puedo pasar URL2 de ser una variable JS a mi código CF. Las variables que está generando en su ejemplo no existen realmente como individuales, sino como una sola cadena. Estuve pensando en esto durante los últimos 2 días, así que me disculpo si sueno confundido. Geo

Entonces... ¿la gente está haciendo clic en tu enlace? ¿Y el enlace se parece al de su tercer ejemplo de código (cityEdit.cfm?recID=123&delete1=123&procedureid=345&city=SOMECITY&state=SOMESTATE). Si es así, ellos debemos aparecen como variables de URL SI está emitiendo una solicitud GET (o incluso una solicitud posterior las pondría en el alcance de la URL). Usando el ejemplo de barny o mi ejemplo de JS, debería poder pasar esas variables exactas de esa manera. - marca un kruger

bueno, parece eso, PERO el ID de procedimiento está vacío. Estoy haciendo todo esto porque necesito obtener el valor del procedimiento del formulario que publiqué en mi pregunta. - Geo

Sí... su código para obtener ese valor es incorrecto. Para obtener un valor de una lista de selección, necesita algo como: documento.formulario1.procedimiento.opciones[documento.formulario1.procedimiento.índiceseleccionado].texto El valor del elemento seleccionado está indexado en una matriz, por lo que debe extraerlo. Toneladas de muestras por ahí: busque en Google "obtener valor del javascript del cuadro de selección" y obtendrá un montón de muestras para trabajar. - marca un kruger

Incluiré todo mi código porque creo que nos confundimos a ti y a mí con esto :) - Geo

Después de todo, lo único que necesitaba era agregar esta única línea de código en mi función JS

$("#deleteProc1").html('<a href="cityEdit.cfm?recID='+recID+'&delete1='+recID+'&delete2='+recID+'&state='+state+'&city='+city+'&procedureid='+procedureid+"\">Delete</a>");

Este enlace me ayuda a acceder a mi función CF y eliminar los procedimientos que he seleccionado de mi lista desplegable.

Gracias a todos los que comentaron mi pregunta.

contestado el 22 de mayo de 12 a las 20:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.