【问题标题】:Is it possible to disable a cfinput type=text field using a conditional cfscript if statement?是否可以使用条件 cfscript if 语句禁用 cfinput type=text 字段?
【发布时间】:2015-03-17 19:33:42
【问题描述】:

我有一个cfform,其中包含动态填充的文本字段。这一切都在登录的门户中。如果用户到达表单时数据库为空,我希望这些字段被“启用”,以便他们可以填写信息并提交表单。但是,如果他们之前已经这样做并且数据库已填充,我希望这些字段被“禁用”。

基本上,我想要:

<cfscript>
if (isDefined("query.column"))
{
disable the cfinput fields
}

这可能吗? 如果没有,关于如何实现这一点的任何想法?

【问题讨论】:

  • 为什么 cfscript 限制?您显然正在使用标签(cfinput),因此只需使用标签并在构建表单时进行区分。
  • 我不确定你到底是什么意思。我愿意接受任何想法来实现这一点。这是他们最初填写的表格,然后单击保存,并且可以选择在将来进行编辑。我希望这些字段在它们为空白时启用,并在从数据库填充时禁用,并且如果需要更新,还有一个编辑按钮可以启用。
  • 如果该列已填充​​,该列不存在吗?你不应该检查列是否有值吗?
  • 是的!那一定是我的问题!如何检查值?我的页面顶部有一个查询 SELECT * FROM table WHERE this = #var#
  • WHERE this = #var# 易受 sql 注入攻击。请务必使用cfqueryparam

标签: if-statement coldfusion cfml cfform cfinput


【解决方案1】:

这是我评论中的意思。我不相信有任何理由在cfscript 标签中做你想做的事。您已经在表单中使用了标签语法,所以在构建表单时只需检查您的条件即可。

例如,现在你有这样的东西:

<html>
    <head>
        <!-- some code here -->
    </head>
    <body>
        <!-- some code here -->

        <cfform ... >
            <cfinput type="text" ... >
        </cfform>

        <!-- some code here -->
    </body>
</html>

我的建议是做这样的事情:

<html>
    <head>
        <!-- some code here -->
    </head>
    <body>
        <!-- some code here -->

        <cfform ... >
            <cfif isDefined("query.column")>
                <cfinput type="text" disabled="disabled" ... >
            <cfelse>
                <cfinput type="text" enabled="enabled" ... >
            </cfif>
        </cfform>

        <!-- some code here -->
    </body>
</html>

在为任何其他字段或按钮等构建表单时,在标签中使用类似的条件。

【讨论】:

  • 这很有意义!但是,当我这样做时,无论出于何种原因,无论是否定义,表单都只想显示第一个 cfinput 标记。所以无论哪种方式,该字段都被禁用,空白或不空白。有任何想法吗? ://
  • 是的,当然,您必须检查数据库列中实际存在的任何值。我只是按照您在原始问题中分享的内容进行。很高兴它对你有用。
  • 如果使用原始input,则使用文字"disabled" 内联禁用它,无需赋值或任何内容:&lt;input ... "disabled"/&gt;。这不适用于cfinput。我一直在尝试分配启用/禁用的真/假,并使用上面的符号disabled="disabled"enabled="enabled"。这种表示法正确吗,看起来很奇怪?
  • 对于cfinput,属性行为取决于表单的格式,如下所示: HTML 格式表单: ColdFusion 将此属性直接传递给 HTML。要禁用输入,请指定 disabled 不带值(HTML 格式)或带值 disabled(XHTML 兼容)。要启用输入,请省略此属性。 Flash 格式表单: 要禁用输入,请指定 disabled 且不带属性,或 disabled="yes"(或任何 ColdFusion 正布尔值,比如真的)。要启用输入,请省略属性或指定 disabled="no"(或任何 ColdFusion 负布尔值,例如 false)。
【解决方案2】:

我发现了问题所在。我确实必须检查一个值。我将 cfif 重写为

<cfif #query.column# eq "NULL" OR #query.column# eq "">
    <cfinput type="text">
<cfelse>
    <cfinput type="text" value="#query.column#" disabled="disabled">
</cfif>

谢谢大家的帮助!

【讨论】:

  • 如果您不使用任何额外功能,最好使用标准的 html &lt;input&gt; 代替。 CF 包装器有点笨拙,给 html 源代码添加了很多不必要的混乱。另外 1) NULL 结果集中的值在 CF 中被视为空字符串。除非您正在测试文字字符“NULL”,否则您只需要后者检查。 2) CFIF 中不需要# 符号。
猜你喜欢
  • 2018-09-26
  • 1970-01-01
  • 2019-04-05
  • 2012-10-10
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多