HTMLのformタグ内にcheckboxがある場合、チェックボックスのチェックを付けている場合はnameとvalueを送信することができるのですが、チェックを付けていない場合はnameすら送られてこないので何も無いという状態になります。

チェックを付けた場合は1を送って、付けてない場合は0を送るという処理であれば、受け側でも処理がしやすいですよね。

今回はcheckboxのチェックを付けていなくてもパラメータを送る方法を紹介します。

同じname属性だと後から書かれたものが有効になる

方法は簡単です。

HTMLでは同じname属性は後から書かれているものが最終的には採用されることを利用します。(※ちなみにid属性はダメです。id属性はページ内でユニークでなければなりません。name属性はユニークであることを求められていないので今回の手法が利用できるわけです。)

以下のように実際のcheckboxの前にhiddenで同じname属性で書いておきます。

<input type="hidden" name="test" value="off">
<input type="checkbox" name="test" value="on"> 

checkboxにチェックが付いている時はonが送られ、チェックが付いていない時はhiddenのほうが有効になり、offが送られます。

ちょっと裏ワザ的な感じですね。