我在JSP文件中的代码如下所示:
<s:form namespace="/user" action="list" method="POST" id="filterListForm" theme="simple"
onsubmit="document.getElementById('filterSearchText').value=document.getElementById('filterSearchText').value.replace(/\\/g,'')">
它不会替换反斜杠char。我尝试过以下方法,但都没有效果:
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>
为什么?有没有办法让它在第一种情况下起作用?
答案 0 :(得分:4)
你想:
var replaced = original.replace(/\\/g, '');
在正则表达式文字中,您需要做的就是将反斜杠加倍以引用它。
当您尝试通过JSP标记传递代码时,为什么它不起作用,那很可能是JSP为您修改字符串。 可能可以做到这一点:
<s:form ... onsubmit=' ... .replace(/\\\\/g, "") ... ' >
但是目前我没有办法尝试。
编辑 - 实际上我发现这很有挑战性。它可能取决于您的标签库的功能。我的框架(Stripes)喜欢HTML-escape属性值,因此很难通过像\
这样的东西(好吧,不可能)。
答案 1 :(得分:0)
(这不是一个真正的解决方案,只是推荐解决这个问题的一般做法。)
底线:使用分离的Javascript。如果你认为把它完全分成不同的文件是太多的工作(尽管这可以帮助你干净地避免所有这些问题),至少把它全部放在底部的脚本标签中。它有助于分离布局和逻辑,并将所有Javascript保存在一个已知位置,使其更易于理解和维护。你甚至不需要onclick / onsubmit属性,你也可以在Javascript中分配它们(通常键入html #id属性)。如果你仍然使用on [event]属性,只需调用一个明智的命名函数,并将函数的实现放在主脚本中。