【问题标题】:Loop through Query, assign value on click dynamically ColdFusion循环查询,在点击时动态分配值 ColdFusion
【发布时间】:2024-05-17 19:05:02
【问题描述】:

我有这个。

<cfquery name="getcities" datasource="local">
    select city, state, ZIP
    from table
    where state = '#stateval#'
    order by city asc
    </cfquery>
    <cfoutput>
      <table>
      <thead>
        <tr>
          <th>City Names in: #stateval#</th>
        </tr>
      </thead>
      <tbody>
    <cfloop query="getcities">
      <tr>
        <td>#getcities.cityname#</td>
      </tr>
    </cfloop>
    </tbody>
    </table>
    </cfoutput>

stateval 被定义,即来自一个选择。循环遍历表很好。我想让每个输出都是可点击的,当点击时,将一个变量分配给city 的名称。示例:如果我遍历 state 是 CA 的位置,然后单击 LA,我希望它将“X”分配给 LA。 'X' 应该是所有人的变量。应该能够列出列表,然后单击 LA、Sacramento、Santa Cruise,并将变量设置为与输出相同。我该怎么做呢???我试图将它设置为一个按钮,并将按钮命名为#getcities.city# 并将其命名为#x#,但除非它是一个表单,否则它不会起作用。我不想提交任何东西。只需在循环内准确点击即可动态获取价值。那么至少现在可以说&lt;cfoutput&gt;Here is the city you just clicked: #x#&lt;/cfoutput&gt;

【问题讨论】:

  • 查找&lt;a href&gt; 以创建链接。还要查&lt;cfqueryparam&gt;的目的
  • 取决于你最终想要什么,AJAX 和 jQuery 可能是一种方法。但请务必遵循cfqueryparam 的作用以及为什么不希望未经处理的变量进入数据库的建议。
  • 另外,如果您打算使用 ColdFusion,learncfinaweek.com 已过时,但仍然是一个很好的资源。

标签: html loops variables coldfusion cfml


【解决方案1】:

带有onClick 操作的简单href 将为您完成此操作。这是一个警报示例。

<cfquery name="getcities" datasource="local">
    select city, state, ZIP
    from table
    where state = <cfqueryparam cfsqltype="cf_sql_varchar" value="#stateval#">
    order by city asc
</cfquery>
<cfoutput>
    <table>
        <thead>
        <tr>
            <th>City Names in: #stateval#</th>
        </tr>
        </thead>
        <tbody>
            <cfloop query="getcities">
                <tr>
                    <td><a href="##" onClick="alert('#getcities.cityname#')">#getcities.cityname#</a></td>
                </tr>
            </cfloop>
        </tbody>
    </table>
</cfoutput>

另外,查看cfqueryparam 以及为什么它很重要。

https://helpx.adobe.com/coldfusion/developing-applications/accessing-and-using-data/accessing-and-retrieving-data/enhancing-security-with-cfqueryparam.html

【讨论】:

  • 限定所有变量的范围也是一个好习惯,以避免意外结果。例如,URL.stateValFORM.stateVal 而不仅仅是 stateVal
  • @Ageax 好电话。我没有将其包含在答案中的唯一原因是我不确定他使用的是哪个示波器。
  • 我也不是 :) 不太确定他们的目标是什么。我怀疑他们真的需要 javascript,但如果没有来自提问者的更多信息,很难说。
  • @ageax 我在 div 中显示城市列表,按州排序。状态值来自下拉列表。当我点击它时它会改变。每个州都有不同数量的城市。我希望能够在加载状态后单击任何城市,并分配一个变量。然后,我将获取此值并通过 url 将其传递到另一个页面,其中按州和城市的查询出现在另一个 div 中。这将显示有关已选择地点的特定信息。这就是目标。
  • 如果您只想创建指向另一个页面的超链接,则不需要新变量。只需使用循环内的查询列来创建超链接。与上面的答案类似,但超链接看起来更像&lt;a href="anotherPage.cfm?state=#EncodeForURL(stateVal)#&amp;cityname=#EncodeForURL(CityName)#"&gt;#EncodeForHTML(CityName)#&lt;/a&gt;。当用户单击其中一个城市名称链接时,它将重定向到“anotherPage.cfm”(并传递州和城市名称)。
【解决方案2】:

我将循环结果填充到 div 中,然后使用 jquery 读取 div 的值并通过 URL 将其作为变量传递。像魅力一样工作。

【讨论】:

  • 包含一些代码将有助于下一个人遇到相同问题。另外,为什么需要 jQuery 在 URL 中传递参数?
  • 在不刷新页面的情况下进行操作
  • 生成超链接不需要刷新页面。所以我怀疑你的意思是别的,比如通过 ajax 显示新内容而不刷新页面。