0

我在 JSP 文件中的代码如下所示:

<s:form namespace="/user" action="list" method="POST" id="filterListForm" theme="simple"
        onsubmit="document.getElementById('filterSearchText').value=document.getElementById('filterSearchText').value.replace(/\\/g,'')">

它不会替换反斜杠字符。我已经尝试了以下方法,它们都不起作用:

replace('/\\/g','')
replace(/\\\\/g,'')
replace(\/\\\/g,'')

但是,如果我将其更改为以下内容,它将起作用:

<s:form namespace="/user" action="list" method="POST" id="filterListForm" theme="simple"
        onsubmit="replaceBackslash()">

<script type="text/javascript">
  function replaceBackslash() { document.getElementById('filterSearchText').value=document.getElementById('filterSearchText').value.replace(/\\/g,''); }
</script>

为什么 ?有没有办法让它在第一种情况下工作?

4

2 回答 2

4

你要:

var replaced = original.replace(/\\/g, '');

在正则表达式文字中,您需要做的就是将反斜杠加倍来引用它。

至于为什么当您尝试通过 JSP 标签传递代码时它不起作用,那可能是 JSP 为您修改字符串。它可能会这样做:

<s:form ... onsubmit=' ... .replace(/\\\\/g, "") ... ' >

但我目前没有很好的方法来尝试

编辑——实际上我发现这很有挑战性。这可能取决于您的标签库的功能。我的框架(条纹)喜欢 HTML 转义属性值,所以很难通过类似&#92;(嗯,不可能)的东西。

于 2012-10-03T20:16:13.537 回答
0

(这并不是真正的解决方案,只是碰巧解决此问题的一般做法的建议。)

底线:使用分离的 Javascript。如果您觉得将其完全分离到不同的文件中工作量太大(即使这可以帮助您彻底避免此类问题),至少将其全部放在底部的脚本标记中。它有助于分离布局和逻辑,并将所有 Javascript 保存在一个已知位置,使其更易于理解和维护。您甚至不需要 onclick/onsubmit 属性,您也可以在 Javascript 中分配这些属性(通常键入 html #id 属性)。如果您仍然使用 on[event] 属性,只需调用一个合理命名的函数,并将该函数的实现放在您的主脚本中。

于 2012-10-03T21:06:17.127 回答