我对这个问题毫无头绪。我有一个名为$opts
的变量。我使用它来填充数据库查询(mysql)的结果。
<select id="User" name="User" >
<?php
$cons=array();
$opts=getOptions("User",$cons,0);
logge(date("Y-m-d H:i:s")." - ".$TAG." - ".$fn." - opts are=".$opts);
echo $opts;?>
</select>
这是有效的,并且选择中填充了用户名:
<option value="1">admin</option>
<option value="2">test</option>
我必须根据所选的用户名选择要填充的倍数。 这是文档就绪函数中的Javascript:
$(document).ready( function () {
// rootloc returns root url
var $_GET = {},
args = location.href.substr(0).split("/");
var rootloc="http://"+args[2]+"/"+args[3]+"/";
$("select").change(function() {
console.log("select on change called.");
var elem=this.id; //this.id id of the calling element
console.log("Element= " + elem);
var seluserid=$(this).val(); // returns userid of selected user
console.log(seluserid);
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) {
}
}
xmlhttp.open("GET",rootloc+"DokumenteUserForm.php?seluserid="+seluserid,true);
xmlhttp.send();
});
//after first load fire change event to fill lists
console.log("call the onchange first")
obj = document.getElementById("User");
fireEvent(obj,'change');
});
现在我填写两个关于所选用户的列表,其中包含数据库中的值:(返回html和php)
<select id="Dokumente" name="Dokumente" multiple="multiple" size="10">
<?php
if (isset($_GET["seluserid"])){
$seluserid=$_GET["seluserid"];
logge(date("Y-m-d H:i:s")." - ".$TAG." - ".$fn." - seluserid= ". $seluserid);
$opts2=getListOptions("Dokumente",$seluserid,0);
logge(date("Y-m-d H:i:s")." - ".$TAG." - ".$fn." - opts are=".$opts2);
echo $opts2;}
?>
</select>
第二个列表以相同的方式填充。
<select id="UserDoumente" name="Userdokumente" multiple="multiple" size="10">
<?php
if (isset($_GET["seluserid"])){
$opts3="";
$opts3=(string)$opts3;
$seluserid=$_GET["seluserid"];
logge(date("Y-m-d H:i:s")." - ".$TAG." - ".$fn." - seluserid= ".$seluserid);
$opts3=getListOptions("Userdokumente",$seluserid,0);
logge(date("Y-m-d H:i:s")." - ".$TAG." - ".$fn." - opts3 are= ".$opts3);
$opts=$opts3;
}
logge(date("Y-m-d H:i:s")." - ".$TAG." - ".$fn." - opts are=".$opts);
echo $opts;
?>
我的问题在最后一个选择多个列表中是正确的。我正在不同的地方记录构建的HTML代码。首先在被叫funciton getListOptions
。结果有:
2015-06-18 17:45:22 - table.php - getListOptions - opts are=<option value="1">Doks/uploads/</option>
现在我正在记录,正如您在上面看到的那样,将其保存在$opts3
之后:
2015-06-18 17:45:22 - DoksForm.php - mainhtml - opts3 are=<option value="1">Doks/uploads/</option>
然后我将$opts3
放入$opts
日志中说:
2015-06-18 17:45:22 - DoksForm.php - mainhtml - opts are=<option value="1">Doks/uploads/</option>
但是当回显那些$ opts时,第一个选择的值出现在框中(HTML源代码):
<select id="UserDokumente" name="Userdokumente" multiple="multiple" size="10">
<option value="1">admin</option>
<option value="2">test</option>
</select>
这怎么可能?据我了解,我用新值覆盖了这个$ opts。我的日志也是这样说的......你有什么想法吗?我不知道如何描述问题或谷歌对这个问题有什么好处。所以我试着在这里解释一下。如果需要进一步的信息,我希望能提供。
如果我使用echo $opts3;
,则列表中或html源代码中没有任何内容,因此它看起来像一个空变量。然后我得到一个PHP错误,说$opts3
未定义。
isset if语句中的变量是否可以是外部的变量?或者可能是因为我的xampp安装可能已损坏?(但其他一切似乎都有效) - &gt;重新安装xampp - &gt;问题仍然存在
问题在于xmlhttp请求部分。我用ajax尝试了这个请求(用xmlhttp替换了它):
$.ajax({
type: 'post',
url: 'DokumenteUserForm.php?seluserid='+seluserid,
// data: $('form').serialize(),
success: function () {
//alert('form was submitted');
}
});
我在php构建选项的html代码之前记录了url,它说:
2015-06-19 16:35:28 - DokumenteUserForm.php - mainhtml - absolute_url= http://localhost/testwebsite/DokumenteUserForm.php?seluserid=2
如此受到怀疑。问题是,在浏览器本身中,网址没有改变。它仍然像以前一样http://localhost/testwebsite/DokumenteUserForm.php
。
所以我认为网址只在服务器端改变,而不是在客户端。也许与我的$opts3
变量相同?
答案 0 :(得分:0)
我终于让它运转了,我想我知道它之前没有用的原因。 如果这是问题,这是一个简单的答案,我花了3天多才找到它。
我的问题是,我试图通过仅替换select中的选项来填充html选择(多个)。我没有在那里有一个div,但尝试使用divs让我进入这个线程:<div> and <select> tags
绕过div,我来到了设置元素内部html的解决方案。
所以现在我首先有一个空的select元素:
<select id="Dokumente" name="Dokumente" multiple="multiple" size="10">
</select>
然后在我的onchange javascript函数中我做一个ajax帖子并设置内部html的结果:
var url="getMselectopts.php";
var p1 = $.post(url,{what:"Dokumente",u:seluserid});
p1.done(function(data){
// console.log(data);
document.getElementById("Dokumente").innerHTML = data;
});
最后它有效。