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, "") ... ' >

しかし、現時点ではそれを試す良い方法がありません

編集— 実際、私はこれが難しいと感じています。おそらく、タグライブラリの機能によって異なります。私のフレームワーク (Stripes) は、属性値を HTML エスケープするのが好きなので、このようなものを渡すのは困難です&#92;(まあ、不可能です)。

于 2012-10-03T20:16:13.537 に答える
0

(これは実際には解決策ではなく、たまたまこの問題を解決するための一般的な方法の推奨事項です。)

結論:分離されたJavascriptを使用してください。別のファイルに完全に分離するのは面倒だと感じた場合 (このようなすべての問題を完全に回避するのに役立ちますが)、少なくともすべてを末尾のスクリプト タグに入れます。レイアウトとロジックを分離するのに役立ち、すべての Javascript を 1 つの既知の場所に保持して、理解と保守を容易にします。onclick/onsubmit 属性さえ必要ありません。それらを Javascript で割り当てることもできます (通常、html の #id 属性をキーにします)。とにかく on[event] 属性を使用する場合は、わかりやすい名前の関数を 1 つ呼び出して、その関数の実装をメイン スクリプトに配置します。

于 2012-10-03T21:06:17.127 に答える