チェックボックスのグループに対してアクションを実行するjavascriptのルーチンがありますが、最終的なアクションでは、ユーザーがチェックボックスにチェックを入れていたか、チェックを外していたかに基づいて、クリックされたチェックボックスにチェックまたはアンチェックを設定したいと考えています。
残念ながら、チェックされているかどうかをチェックするたびに、ユーザーが常にチェックしていることを示す "on" が返されます。 javascriptも添付しています。
// Uncheck all the checkboxs with the same Tax Credit
for (i=0; i<arrChecks.length; i++)
{
var attribute = arrChecks[i].getAttribute("xid")
if (attribute == elementName)
{
// if the current state is checked, unchecked and vice-versa
if (arrChecks[i].value == "on") // <-- This is always returning true, even if the box is being unchecked
{
arrChecks[i].checked = 1;
} else {
arrChecks[i].checked = 0;
}
} else {
arrChecks[i].checked = 0;
}
}
checkbox要素のcheckedプロパティに対して評価する必要があります。
for (i=0; i<arrChecks.length; i++)
{
var attribute = arrChecks[i].getAttribute("xid")
if (attribute == elementName)
{
// if the current state is checked, unchecked and vice-versa
if (arrChecks[i].checked)
{
arrChecks[i].checked = false;
} else {
arrChecks[i].checked = true;
}
} else {
arrChecks[i].checked = false;
}
}
checkboxの
value`属性は、何で設定するかです。
<input type='checkbox' name='test' value='1'>
つまり、誰かがそのボックスをチェックすると、サーバーは test
という名前の変数を value
の 1
で受け取ります。チェックしたいのは、その value
ではなく (チェックされていてもいなくても変わることはありません)、チェックボックスの checked
ステータスです。
つまり、このコードを置き換えると、次のようになります。
if (arrChecks[i].value == "on")
{
arrChecks[i].checked = 1;
} else {
arrChecks[i].checked = 0;
}
このように
arrChecks[i].checked = !arrChecks[i].checked;
これで動くはずです。これには 0
と 1
の代わりに true
と false
を使う必要があります。
何が問題なのかはわかりませんが、これで解決できることは間違いありません。
for (i=0; i<arrChecks.length; i++)
{
var attribute = arrChecks[i].getAttribute("xid")
if (attribute == elementName)
{
if (arrChecks[i].checked == 0)
{
arrChecks[i].checked = 1;
} else {
arrChecks[i].checked = 0;
}
} else {
arrChecks[i].checked = 0;
}
}