我在继承的一些代码上遇到此错误。我正在运行cf9和jQuery 1.7。
值+(indx + 1)+无法转换为数字。
这是循环
for (var indx = 0; indx < avgPopulationRecordsCount; indx++) {
CloneAvgPopulationItem(indx, '#rc.qGetAP.ID[' + (indx + 1) + ']#');
}
答案 0 :(得分:5)
您的错误消息完全准确:“无法将值+ (indx + 1) +
转换为数字。”
您的变量rc.qGetAP.ID
是一个查询列(实际上是一个数组),并且您尝试使用字符串(如单引号所示)对其进行索引,CF正在尝试将其转换为行号,但它无法将文本+ (indx + 1) +
翻译成数字。
这里的问题是代码更少,更多的是了解正在发生的事情:
在服务器上发生ColdFusion时,浏览器中会出现JavaScript(这就是jQuery),而不是jQuery。
这是两个独立且不同的环境。
它们没有按照您尝试的方式进行交错 - 它们仅通过HTTP请求/响应(或通过WebSockets /等)进行交互。
简而言之:
有关客户端/服务器和HTTP请求/响应的更完整说明,here is a blog post discussing the subject。
一旦了解了此过程的工作原理,解决方案就是:
1)首先从CF生成所有相关的JS变量(所以你的Ids被翻译成JS数组),你有一行代码来调用JS里面的JS函数CloneAvgPopulationItem循环。
例如:
<script type="text/javascript">
var AvgPopIds = <cfoutput>#serialiseJson(ValueArray(rc.qGetAP.ID))#</cfoutput>;
for (var index = 0; index < avgPopulationRecordsCount; index++) {
CloneAvgPopulationItem(index, AvgPopIds[index]);
}
</script>
2)解决CF端的循环,因此您可以获得多个调用CloneAvgPopulationItem函数的JS行。
例如:
<script type="text/javascript">
<cfoutput query="rc.qGetAP">
CloneAvgPopulationItem(#rc.qGetAP.CurrentRow#,'#JsStringFormat(rc.qGetAP.Id)#');
</cfoutput>
</script>
重要的是声明:不要只使用这些代码示例,而是阅读并理解上面链接的关于JavaScript和ColdFusion运行位置的文章 - 整个HTTP请求/响应过程是一个重要的理解和意愿避免将来遇到类似的问题。
答案 1 :(得分:0)
看起来您正在使用Javascript混合<cfscript>
。首先在服务器上处理ColdFusion,然后生成生成的Javascript。它看起来像你想要的更接近
<cfoutput>
<script type="text/javascript>
<cfloop from="0" to="#avgPopulationRecordsCount#" index="indx">
CloneAvgPopulationItem(#indx#, '#rc.qGetAP.ID[indx]#');
</cfloop>
</script>
</cfoutput>
根据评论进行更新
在服务器上运行上述代码后,网页上将显示以下内容。
<script type="text/javascript>
CloneAvgPopulationItem(1, 'someInfo');
CloneAvgPopulationItem(1, 'moreInfo');
CloneAvgPopulationItem(1, 'yetmoreInfo');
...
</script>