我有一个动态下拉框,调用另一个PHP页面。我已经让它按照我想要的方式工作了。
<tr>
<td>
<p> Select a delivery date </p>
</td>
<td>
<select name='listdate' onchange='showDelivery(this.value)'>
<option value=''>select delivery type:</option>
<option value='forwardorder'>Forward Order</option>
<option value='byreturn'>By Return</option>
</select>
<div id='txtHint'>
<b>Change to drop down box to display delivery date</b>
</div>
</td>
</tr>
function showDelivery(str)
{
if (str=="")
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getDelivery.php?q="+str,true);
xmlhttp.send();
}
php脚本
$q=$_GET["q"];
// And create a cid object
require_once $CID_INCLUDE_PATH . "/cid.php";
$cid = new CHCID();
if ($q == 'forwardorder')
{
echo"<td><select 'name'='deliveryDate'/> ";
$listCapacityDates = $cid->ListCapacity();
foreach($listCapacityDates as $x) {
echo "<option value='".$x."'>".$x."</option> </select>";
}
}
if ($q == 'byreturn')
{
echo"<div id='div1'>Enter By Return Date<input type='text''name='deliveryDate' />
</div>";
}
我知道这个问题,因为当表单提交没有提交这些值时,Ajax下拉列表的结果会显示在PHP页面中。但我不确定我怎么能提交它们?有任何想法吗?
答案 0 :(得分:2)
echo"<td><select 'name'='deliveryDate'/> ";
应该是:
echo "<td><select name='deliveryDate'/> ";
和
echo"<div id='div1'>Enter By Return Date<input type='text''name='deliveryDate' />
应该是:
echo"<div id='div1'>Enter By Return Date<input type='text' name='deliveryDate' />
和
if ($q == 'forwardorder')
{
echo"<td><select 'name'='deliveryDate'/> ";
$listCapacityDates = $cid->ListCapacity();
foreach($listCapacityDates as $x) {
echo "<option value='".$x."'>".$x."</option>";
}
echo "</select></td>";
}
</select>
应该在foreach之外
答案 1 :(得分:1)
你似乎明白为什么它不起作用,而不是如何纠正它,对吧?
当您从PHP页面返回数据时,需要通过javascript处理它。 而不是返回,
echo "<option value='".$x."'>".$x."</option> </select>";
应该是json。
{ val : key, val : key }
然后Javascript可以将其插入到HTML DOM中,然后您的表单会在您提交表单时重新确定值。
至于Javascript代码,有几种方法,jQuery有一些插件可以处理它。 否则我可以挖掘一些代码,如果有人不打扰我的话:) :( / p>)
编辑:
在手边,我认为这段代码应该有用
这是未经测试的,但希望能更多地了解如何使用它
取代
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
与
var response = xmlhttp.responseText;
var select = document.getElementByName('listdate');
var option;
for(var i=0; i<response.length; i++)
{
option = document.createElement("OPTION");
option.text = response.key[i];
option.value = response.val[i];
select.options.add(option);
}