我有原型功能。我想将它包装在函数标记周围,然后从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
答案 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>