2

我有一个原型功能。我想将它包裹在函数标签上,然后从 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
4

3 回答 3

5

您尝试执行此操作的方式是不可能的。

在不使用某种 http 请求(例如通过 AJAX)的情况下,您无法通过单击按钮来调用 ColdFusion 函数。ColdFusion 是服务器端代码,onclick是客户端,如果不向服务器发出某种请求,这两者就无法相互交互。

您需要用 JavaScript 重写函数或重写代码以发出 AJAX 请求来运行 ColdFusion 函数。

于 2013-09-17T13:08:01.557 回答
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>
于 2013-09-17T18:33:35.910 回答
1

单击 HTML 元素时无法调用冷融合函数。这就像使用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>

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

如果你想使用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>
于 2014-06-30T09:30:16.050 回答