我正在将数据从 DOS dBASE IV(是的,我就是这么老)迁移到 MySQL,并使用 ColdFusion 11 构建一个输入表单。 我的问题是,举个例子,我有一个名为“size”的字段,其中的值为“ 2” X 2“ X 1/4” X 10' LONG ”。 只是数千个之一,所以请不要建议我用 txt 替换英寸和英尺标记。 首先,我提供一个用于从表中选择要显示的字段的表单,然后提供一个用于将筛选器和搜索条件应用于所选字段的表单,然后查询以获取结果。 因为我有一个动态字段列表,所以我循环遍历它们的列表。 然后,我替换 ',然后替换 ",以便字段值将显示在 html 输入表单属性中。 除非值中同时存在 ' 和 " ,否则一切正常。然后 javascript onBlur 函数返回错误“参数列表后未捕获的语法错误:缺少 )”
<!---Coldfusion code --->
<cfloop list="#fcolumnlist#" index="c"> <!---Loop over list of fields selected--->
<td>
<cfset thisfield = '#Evaluate('t.#c#')#'> <---Determine the value of the field--->
<cfset thisfield = Replace(thisfield, '"', "&##34;", "ALL")> <--- replace ' --->
<cfset thisfield = Replace(thisfield, "'", "&##39;", "ALL")> <--- replace " --->
<input type="text" id="#c##t.id#" name="#c#" value='#thisfield#'
onfocus="adjWidth(this);" onblur='ck_chg(this, "#thisfield#" )' >
</td>
</cfloop>
我的Javascript函数
function adjWidth(el) {
el.style.width =((el.value.length + 10) * 8) + 'px';
}
function ck_chg(el, v) {
if ( el.value!=v )
{
el.style.backgroundColor='#05AD05';
el.style.color='#FFFFFF';
} else {
el.style.backgroundColor='';
el.style.color='#000000';
}
}
html 源代码如下所示,并在表单中正确显示。顺便说一句:我的表单可以返回 1 到 5,000 多条记录。
<input type="text" id="SIZE3137" name="SIZE" value='2" X 2" X 1/4" X 10' LONG' onfocus="adjWidth(this);" onblur='ck_chg(this, "2" X 2" X 1/4" X 10' LONG" )' >
我尝试了几乎所有可能的替换英寸和英尺标记的组合,但没有任何效果。我尝试过只使用显示更容易的文本区域,但我无法让样式和 javascript 按我想要的方式运行。顺便提一句;函数 adjWidth() 是因为未知列的宽度未知,它可以工作,丑陋但它可以工作。 你们中一位长得好看、年轻的绅士能帮帮一个老屁吗? 我怎样才能改进或至少让这项工作发挥作用?
一种快速解决方法是依赖已具有所需字符串值的
value
属性。所以 onblur
可以这样设置:
<input type="text" id="#c##t.id#" name="#c#" value='#thisfield#'
onfocus="adjWidth(this);"
onblur='ck_chg(this, this.getAttribute("value") )' >
EncodeForHTMLAttribute
来转义 HTML,而不是通过 Replace
调用“手动”执行此操作。