Javascript 错误未捕获语法错误:当输入值中同时包含“和 ' 时,参数列表后缺少 )

问题描述 投票:0回答:1

我正在将数据从 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&#34; X 2&#34; X 1/4&#34; X 10&#39; LONG' onfocus="adjWidth(this);" onblur='ck_chg(this, "2&#34; X 2&#34; X 1/4&#34; X 10&#39; LONG" )' >

我尝试了几乎所有可能的替换英寸和英尺标记的组合,但没有任何效果。我尝试过只使用显示更容易的文本区域,但我无法让样式和 javascript 按我想要的方式运行。顺便提一句;函数 adjWidth() 是因为未知列的宽度未知,它可以工作,丑陋但它可以工作。 你们中一位长得好看、年轻的绅士能帮帮一个老屁吗? 我怎样才能改进或至少让这项工作发挥作用?

javascript forms double-quotes coldfusion-11 single-quotes
1个回答
0
投票

一种快速解决方法是依赖已具有所需字符串值的

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
调用“手动”执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.