0

チェックボックスとjavascriptを使用して、チェックボックスがオンになっている場合に追加の項目を表示するスクリプトがあります。これはほとんどの場合うまく機能しているようです。ただし、問題を引き起こしているチェックボックスが1つあります。私はそれに関連付けられているjavascriptの魔法のために推測します。チェックボックスをオンにしてからオフにすると、チェックボックスは常に投稿後にissetを返します。

チェックボックスをオンにしないでください。送信すると、正しく設定されていないリターンが返されます。返品を確認して送信する必要があるので、返品を確認して送信します。http://vampke.uphero.com/tst.phpに例を設定しました

コードは次のとおりです。

if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(isset($_POST['se_currentitem'])) echo "CHECKBOX = ISSET";
else echo "CHECKBOX = NOT SET";
}

echo <<< EOD

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
.hiddenDiv {display: none;}
.visibleDiv{display: block;}
</style>
</head>
<body>
<script language="javascript" type="text/javascript">
<!--

var currentitem = 0;

function toggle_currentitem(){
mydiv = document.getElementById("currentitemcontainer");
if (document.getElementById('se_currentitem').checked){
mydiv.className = "visibleDiv";
if(currentitem==0){
addcurrentitem();
}
}
else {
mydiv.className = "hiddenDiv";
}
}

function addcurrentitem(){
currentitem++;
var newitem = document.createElement('div');
newitem.id = currentitem;
newitem.innerHTML= "<p><strong><em>new item</em></strong><br /><label>select a number:</label><select name='se_currentitem[]'><option value='1'>1</option><option value='2'>2</option><option value='3'>3</option><option value='4'>4</option><option value='5'>5</option></select></p>";

document.getElementById('currentitem').appendChild(newitem); 
}

//-->
</script>
<form action ="" method="post">
<input type="checkbox" id="se_currentitem" name="se_currentitem" value="1" onchange="toggle_currentitem()" /><label for="se_currentitem">click the checkbox to activate the items</label> <br />

<div id="currentitemcontainer" class="hiddenDiv">
<div id="currentitem"></div>
<a id='addnewcurrent' onclick='addcurrentitem()'>add item</a>
</div>
<input type="submit" name="submit" value="submit" />
</form>
</body>
</html>

誰かが何が起こっているのか知っていますか?

4

1 に答える 1

2

チェックボックスには名前が付けられse_currentitemselectメニューには。という名前が付けられse_currentitem[]ます。PHPの$_POST配列は、これらを同じものとして扱います。

  • チェックボックスをオンにすると、selectメニューが作成されます。
  • チェックボックスをオフにすると、メニューは非表示になりselectますが、メニューはDOMに残り、ブラウザによって送信されます。ネットワークインスペクター(またはtcpflowなど)で通知します。ブラウザがとの両方se_currentitemを送信することse_currentitem[]

チェックボックスの名前を変更して呼び出されないようにする必要がありますse_currentitem(またはselectメニューの名前を変更して呼び出されないようにしますse_currentitem[])。

于 2013-01-21T21:22:19.757 に答える