如何从“ColdFusion按钮”调用JavaScript函数

时间:2013-09-16 20:14:06

标签: ajax function coldfusion coldfusion-9

我有原型功能。我想将它包装在函数标记周围,然后从cfform中的按钮调用它。有可能吗?我该怎么做?

我试过这个,但是我得到一个错误,说数组没有定义。所有帮助都表示赞赏。

<cfscript >
    function calculateTotal(){
        var Price = Array();
        var Quantity = Array();
            $$('.x-grid3-col-PRICE').each(function(el){Price[Price.length] = el.innerHTML; });
            $$('.x-grid3-col-QUANTITY').each(function(el){Quantity[Quantity.length] = parseInt(el.innerHTML); });

        var Totals = 0;
        for (var index = 0; index < Price.length; ++index) {
            if (!isNaN(Price[index]) && !isNaN(Quantity[index]))
             {
             Totals =  Totals + (Price[index] * Quantity[index]);
                    }

                }
        $('total').value = Totals;
       return true;
    }
    </cfscript>

<cfform>
     <cfinput type="Button" name="submit" value="Calculate Order" onclick="#calculateTotal()#">
    <cfinput type="Text" name="total" disabled="true" label="Total $" size="5">
</cfform

3 个答案:

答案 0 :(得分:5)

您尝试这样做的方式是不可能的。

您无法通过单击按钮来调用ColdFusion函数,而无需使用某种http请求,例如通过AJAX。 ColdFusion是服务器端代码,onclick是客户端,没有向服务器发出某种请求,这两者无法相互交互。

您需要在JavaScript中重写函数或重写代码以生成运行ColdFusion函数的AJAX请求。

答案 1 :(得分:1)

所以在阅读了Adam Cameron的文章后,我找到了解决问题的方法。我没有将函数包装在<cfscript>标记中,而是将其与<cfsavecontent>包装在一起。如果有人在那里寻找相同的问题,我就是这样做的。

基本上,我将javascript函数代码放在带有变量的cfsavecontent标记中,因此当服务器与CMFL对话时,它只传递编译中的变量“calculatetotal”。

<cfsavecontent variable="calculateTotal">
        var Price  = Array();
        var Quantity = Array();
            $$('.x-grid3-col-PRICE').each(function(el){Price[Price.length] = el.innerHTML; });
            $$('.x-grid3-col-QUANTITY').each(function(el){Quantity[Quantity.length] = parseInt(el.innerHTML); });

        var Totals = 0;
        for (var index = 0; index < Price.length; ++index) {
            if (!isNaN(Price[index]) && !isNaN(Quantity[index]))
             {
             Totals =  Totals + (Price[index] * Quantity[index]);
                    }

                }
        $('total').value = Totals;
       return true;
</cfsavecontent>


<cfform name="display" format="html">
         <cfgrid name= "cart" query="getdtls" selectmode="edit"  width="580" format="html">
            <cfgridcolumn name="chargename" header="Charge Type" dataalign="right" select="No" >
            <cfgridcolumn name="price" header="price"type="numeric"  dataalign="right" select="No" >
            <cfgridcolumn name="quantity" header="Quantity" type="numeric"  dataalign="right"  >               
        </cfgrid>
       <cfinput type="Button" name="calculateBtn" value="Calculate Order" onclick="#calculateTotal#">
       <cfinput type="Text" name="total" disabled="true" label="Total $" size="5">

    </cfform>

答案 2 :(得分:1)

单击HTML元素时无法调用coldfusion函数。这就像使用coldfusion(服务器端语言)作为客户端语言。您尝试执行的方法将在html元素中打印函数的值,如此

      <cfform>
       <cfinput type="Button" name="submit" value="Calculate Order" onclick="**true**">
       <cfinput type="Text" name="total" disabled="true" label="Total $" size="5">
      </cfform>

使用#calculateTotal()#inside onclick:加载页面时将调用函数,而不是单击。

如果你想使用coldfusion而不是javascript / jquery来使用onclick函数,你可以使用这样的标签 -

    <cfsavecontent variable="calculateTotal">
            //your code you want to execute
    </cfsavecontent>

    <cfform>
       <cfinput type="Button" name="submit" value="Calculate Order" onclick="#calculateTotal#">
       <cfinput type="Text" name="total" disabled="true" label="Total $" size="5">
    </cfform>