私はいくつかの古いコードで作業しています。組み込みの ColdFusion フォーム検証 (_required
隠しフィールド) を使用します。フォームにキャンセルボタンを追加したい。キャンセル ボタンは実際にいくつかのビジネス ロジックを処理する必要があります (そのため、location.href を他のページに設定することはできません)。問題は、キャンセル ボタンが送信ボタンであるため、組み込みの検証がトリガーされ、フィールドが必須であるというエラーがユーザーに表示されることです。
その特定の送信ボタンの検証を無効にする方法はありますか? フォームはさまざまな場所で使用されているため、フォームを構築する基になるコードを変更しようとはしません。これが私のコードの大幅に簡略化されたバージョンです:
<cfif IsDefined("Form.OK")>
You clicked OK!
<cfelseif IsDefined("Form.Cancel")>
You clicked Cancel!
</cfif>
<cfoutput>
<form action="#CGI.Path_Info#" method="POST">
Enter Name: <input type="text" name="Name" value="" /><br/>
<input type="hidden" name="Name_required" value="" />
<input type="submit" name="OK" value="OK" />
<input type="submit" name="Cancel" value="Cancel" />
</form>
</cfoutput>
私が考えたことの 1 つは、[キャンセル] ボタンの onclick で、非表示の「_required」フィールドを DOM から削除することです。これは機能しますが、非常にハッキーに感じます。そのアプローチに使用したJavascriptは次のとおりです。
<script type="text/javascript">
function removeRequiredFields() {
var els = document.getElementsByTagName('input');
for(var i = 0; i <= els.length; i++) {
if(els[i].type == 'hidden' && els[i].name.endsWith('_required'))
els[i].parentNode.removeChild(els[i]);
}
}
</script>