1

我一直在为我正在构建的站点/工具进行自定义表单完成工作。

我让搜索工作,它在输入字段下方的一个小 div 中显示结果。我想让用户查看结果,单击相应的结果,并允许它使用相应的数据填充表单字段。这在数据中没有特殊字符(即撇号)时有效,但如果它有撇号,则函数调用会中断。我非常了解将特殊字符更改为 HTML 特殊字符:

'

而且,我在将数据添加到数据库时已经这样做了。问题是,由于函数调用是通过 AJAX 放入 div 中的,因此 HTML 特殊字符在放入页面时会被“评估”,并成为文字字符。下面是一个函数调用的例子:

onclick="popForm('1234', 'Some Name', 'Another Name', 'Someguy's Thing', '5678')"

这是我正在尝试做的所有事情的清单:

  1. 用户在字段中输入数据
  2. 一个 javascript 函数通过 onkeyup() 捕获输入,并对其进行处理
  3. 该函数使用 AJAX 调用 PHP 脚本
  4. PHP 脚本执行搜索,获取结果,并回显一个包含结果的表,以及用于填充字段的 onclick 函数调用。
  5. Javascript 处理来自 AJAX 的结果,并将结果添加到 div 的 innerhtml。
  6. 用户单击结果,触发 onclick,使用单引号括起来的字符串参数进行函数调用
  7. 函数通过 document.getElementById("fieldname").value=string 将字符串添加到适当的字段中;
  8. 用户提交表单

目前,由于函数调用中的文字撇号,我们一直到第 6 步,这是它中断的地方。

关于如何解决这个问题的任何想法?

4

3 回答 3

1

我会认真考虑重写你的逻辑。

  1. 不要使用内联 DOM0 事件处理程序——正是由于这种原因,它们很容易出错
  2. 返回数据,而不是函数调用 -eval不好,mkay?
  3. 将适当的事件处理程序(理想情况下使用element.addEventListener)绑定到动态创建并附加到适当元素的一流函数
于 2012-04-17T10:06:56.693 回答
0

您可以用preg_replace“escape_quote”之类的特殊字符串替换php脚本中的所有单引号(在步骤5之前),然后在您的函数中用单引号popForm替换“escape_quote”。.replace

于 2012-04-17T09:44:10.953 回答
0

您需要转义传递给带有撇号的 javascript 函数的数据。

onclick="popForm('1234', 'Some Name', 'Another Name', 'Someguy\'s Thing', '5678')"
于 2012-04-17T09:56:23.147 回答