在Coldfusion中捕捉IE javascript错误的“最后记录”

时间:2010-03-31 10:38:14

标签: javascript arrays google-maps coldfusion

我正在使用ColdFusion将英国邮政编码拉入数组,以便在Google地图上显示。这是从SQL数据库动态发生的,因此数字的范围可以是1到100 +

脚本效果很好,然而,在IE(呻吟)中,它决定在加利福尼亚的某个地方显示离线的一个点。

我在之前的webapp中修复了这个问题,这是由于每个数组项之间的逗号仍然存在于最后。在Firefox,Safari等中运行良好,但不适用于IE。

但是,那个人正在使用10集记录,所以很容易解决。

我只需要一个小的if语句来包裹我的逗号,以便在它到达最后一条记录时隐藏它。我似乎无法做对。任何提示/建议?

这是有问题的代码行:

var address = [<cfloop query="getApplicant"><cfif getApplicant.dbHomePostCode GT ""><cfoutput>'#getApplicant.dbHomePostCode#',</cfoutput></cfif> </cfloop>];

希望有人可以帮助解决这个相当简单的请求。我在办公室度过了糟糕的一天!

5 个答案:

答案 0 :(得分:5)

var address = [#ListQualify(ValueList(getApplicant.dbHomePostCode), "'")#]

我注意到代码中有<cfif getApplicant.dbHomePostCode GT "">

使用ListQualify()空的(空或空字符串)后置代码将显示在输出中,因为ColdFusion列表函数忽略空列表元素。


编辑:此答案的上一版本表明空元素会显示在ListQualify()的结果中。这是不正确的,但前两个注释引用了这个初始修订。

答案 1 :(得分:1)

我的方法略有不同,你必须做更少的设置,也不必迭代;这一切都完成了cfloop标签。

var address = [
<cfloop from="1" to="#getApplicant.recordcount#" index="i">
<cfif getApplicant.dbHomePostCode GT "">
  <cfoutput>
    '#getApplicant.dbHomePostCode[i]#'
    <cfif i lt getApplicant.recordcount>,</cfif>
  </cfoutput>
</cfif>
</cfloop>
];

这里没有休息时间,你应该可以将它粘贴到你的页面中,它会起作用。

var address = [<cfloop from="1" to="#getApplicant.recordcount#" index="i"><cfif getApplicant.dbHomePostCode GT ""><cfoutput>'#getApplicant.dbHomePostCode[i]#'<cfif i lt getApplicant.recordcount>,</cfif></cfoutput></cfif></cfloop>];

答案 2 :(得分:0)

试试这个

var address = [<cfset i=0><cfloop query="getApplicant"><cfset i=i+1><cfif getApplicant.dbHomePostCode GT ""><cfoutput>'#getApplicant.dbHomePostCode#'<cfif i LT getApplicant.RecordCount>,</cfif></cfoutput></cfif></cfloop>];

上面的代码使用Integer(i)来存储循环中的位置,当输出时,逗号检查以查看i是否小于SQL结果的大小。这样,如果它不是结果集的最后一行,它将只输出逗号。

答案 3 :(得分:0)

@Tomalok有一个很好的答案。这可能就是我要用的。

在看到他的回答之前,我的答案可能就是这样:

<cfset codelist = "">
<cfloop query="getApplicant">
    <cfif len(dbHomePostCode)>
        <cfset codelist = listappend("'#codelist#'", dbHomePostCode)>
    </cfif>
</cfloop>
<cfset address = "[#codelist#]">

答案 4 :(得分:0)

使用query.recordcount可以确定您是否位于查询的最后一行并相应地调整输出。整体Tomalak和Ben Doom都有很好的答案,但是这个答案显示了如何使用你原来的思路解决问题。

<cfset var address = "[">
<cfloop query="getApplicant">
    <!--- If not the last row, include the comma --->
    <cfif getApplicant.dbHomePostCode NEQ "" AND getApplicant.currentrow NEQ getApplicant.recordcount>
        <cfset address = address & getApplicant.dbHomePostCode & ",">

    <!--- If last row, omit the comma --->
    <cfelseif getApplicant.dbHomePostCode NEQ "">
        <cfset address = address & getApplicant.dbHomePostCode>
    </cfif>
</cfloop>
<cfset address = address & "];">

<!--- Now we output the string all at once --->
<cfoutput>#address#</cfoutput>