遇到个问题很困惑!
我在一个js函数里面 先通过ajax获得一个拼成html字符串的返回, 比如说<a id="pid" href=''''> .....
将这个字符串赋给一个div的innerHTML, 然后紧接着我就 通过document.getElementById("pid") 想获得这个对象,
但始终是null, 大侠们有没有办法能通过id获得这个对象 ,, 求助!!!!
我在一个js函数里面 先通过ajax获得一个拼成html字符串的返回, 比如说<a id="pid" href=''''> .....
将这个字符串赋给一个div的innerHTML, 然后紧接着我就 通过document.getElementById("pid") 想获得这个对象,
但始终是null, 大侠们有没有办法能通过id获得这个对象 ,, 求助!!!!
解决方案 »
- eclipse导入的工程,无法添加进tomcat
- HTML中读取XML文件异常
- 找不到数据库操作类
- tomcat与myeclipse的问题?急急?
- 注册页面验证代码
- Tomcat shutdown 错误,找不到原因
- WIN2000 Server做JSP服务器该怎样配置!要哪些东西!急!急!急!急!急!急!!在线等!一解决立刻就给分!!!!
- 如何向数据库里写Date类型的数据!
- 请问如何处理这三个文件才可以正常使用jsp连接ms sql数据库??
- 天啊,存储过程返回的记录集不能用absolue语句,出错信息是Result set type is TYPE_FORWARD_ONLY
- 这个框架代表什么意思啊?(初学者)
- 再见oracle乱码
贴代码!
我估计你的问题出在异步ajax上了。你是不是大致这样的?new Ajax.Request(url, {onSuccess: function(transport) {
div.innerHTML = '<a href="pid"/>';
}});
alert(document.getElementById('pid'));这样是获取不到的。因为执行完Request,马上就会执行alert,这时候实际onSuccess动作还没有完成。
两种办法解决,一种,把访问代码alert放入onSuccess中,另外一种设置request为同步执行,具体看你用的什么js框架了
还有可能就是异步问题.代码贴出来吧.
其他地方不会有语法问题. 感谢帮忙看看function showChildNodes(link){
var subTree = document.getElementById(link.subTree);
/**
*.....
*/
var parts = link.parts;
var url = link.href;
var partIds = "/" + parts;
var index = url.indexOf("$parts");
var reqUrl;
if (index != -1) {
var url1 = url.substr(0, index);
var url2 = url.substr(index);
reqUrl = url1.replace(new RegExp("&sp=(.*)"), partIds + "&sp=$1");
if (url1 == reqUrl) {
reqUrl += partIds;
}
reqUrl += url2.replace("$parts", "");
} else {
reqUrl = url.replace(new RegExp("&sp=(.*)"), partIds + "&sp=$1");
if (url == reqUrl) {
reqUrl += partIds;
}
}
var param = link.param;
if (param!=null){
reqUrl += param;
}
if(reqUrl.indexOf("&"+paramWorkStateName+"=")<0){
var flag = getElement(paramWorkStateName);
if(flag!=null){
reqUrl += "&"+paramWorkStateName+"="+flag.value
}
}
if(reqUrl.indexOf("&"+browseStateName+"=")<0){
var browseFlag = getElement(browseStateName);
if(browseFlag!=null){
reqUrl += "&"+browseStateName+"="+browseFlag.value
}
}
reqUrl += "&rand=" + Math.random();
var request = createXmlHttpRequest();
var req = new Object();
req.request = request;
req.link = link;
req.oncomplete = function(){
var root = this.request.responseXML.documentElement;
var partNodes = root.childNodes;
var part = partNodes[0];
var subTree = document.getElementById(this.link.subTree);
if(part.attributes){
if (subTree) {
if (part.childNodes != null && part.childNodes.length > 0) {
for (var ii = 0; ii < part.childNodes.length; ii++) {
content += part.childNodes[ii].nodeValue;
}
//这里content 就是后台程序返回的相应, 格式大概如下<div><a id="pid"+变量 .../></div>
if (subTree.innerHTML != content) {
subTree.innerHTML = content;
}
}
else{
subTree.parentNode.removeChild(subTree);
}
link.className = "link_open";
subTree.className = "subTree_open";
link.loaded = true;
}
}
hideLoadingMarker();
var listener = this.link.loadListener;
if(listener!=null){
listener();
}
//然后这里我根据上面的pid+变量来获取这个对象 始终是null
getNodeId(this.link.priceId,this.link.parentId);
var linkObj = document.getElementById("pid"+变量);
alert(linkObj);
if (linkObj)
....;
}
request.onreadystatechange = function(){
if (req.request.readyState == 4) {
if (req.request.status == 200){
req.oncomplete();
} else {
alert("获取数据失败,请刷新页面");
}
}
}
request.open("get", reqUrl, true);
request.send(null);
return false;
}
觉得你应该要将获取数据相应的地方拿到值后再根据id进行获取
var linkObj = document.getElementById("pid"+变量);
我把这个变量直接改成那个对应的常量, 这个对象就可以获得到,
比如程序返回变量=1001 , 我直接写document.getElementById("pid1001"); 就可以获得对象,
但这个变量alert出来的确是同一个值, 很奇怪
var linkObj = document.getElementById(ids);
可能因为你那个变量是个数字的关系吧。
alert一下responseText看看能得到什么