Javascript无法识别动态div内容
我有一个脚本,我一直在为一周的战斗。Javascript无法识别动态div内容
我有一个页面,其中包含id(“content”)的div。现在我加载了一些内容,一个包含在div标签中的特定的表单,并将其显示在这个VIA Ajax中,并且它显示的很好
现在,挑战是 - 当表单被提交时,我正在调用一个函数将禁用该div标签中元素的所有字段。我总是得到错误“未定义”。
看来,DIV,我请来的页面不被JS认可..
我已搜查谷歌,必应,yahoo..i只是还没有找到解决办法...
请问,我该怎么做?
我已经包含下面的代码 -
+++++++++ 我的外部下面的代码JavaScript文件
++++++++++++ ++++++++
// JavaScript Document
var doc = document;
var tDiv;
var xmlHttp;
var pgTitle;
function getXMLObj(){
if (window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, Safari
Obj = new XMLHttpRequest();
}
else if (window.ActiveXObject){
// code for IE6, IE5
Obj = new ActiveXObject("Microsoft.XMLHTTP");
}
else{
alert("Your browser does not support Ajax!");
}
return Obj;
}
function loadCont(toLoad, view){
doc.getElementById('loadBlank').innerHTML = '<div id="loading">Processing Request...</div>';
var url;
switch(toLoad){
case 'CI':
pgTitle = "Administration - Company Information";
url = "comp_info.php?v=" + view + "&sid=" + Math.random();
break;
case 'JB':
pgTitle = "Administration - Jobs";
url = "jobs.php?v=" + view + "&sid=" + Math.random();
break;
case 'US':
pgTitle = "Administration - Users";
url = "users.php?v=" + view + "&sid=" + Math.random();
break;
case 'EP':
pgTitle = "Administration - Employees";
url = "emp.php?v=" + view + "&sid=" + Math.random();
break;
case 'AP':
pgTitle = "Administration - Recruitments";
url = "applicants.php?v=" + view + "&sid=" + Math.random();
break;
case 'JV':
pgTitle = "Administration - Recruitments";
url = "jobvacancy.php?v=" + view + "&sid=" + Math.random();
break;
}
xmlHttp = getXMLObj();
if (xmlHttp !== null && xmlHttp !== undefined){
xmlHttp.onreadystatechange = loadingContent;
xmlHttp.open('GET', url, true);
xmlHttp.send(null);
}
}
function loadingContent(){
if (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete'){
//Show the loading and the title, but hide the content...
if (xmlHttp.status == 200){
doc.getElementById('dMainContent').innerHTML = parseScript(xmlHttp.responseText);
doc.getElementById('loadBlank').innerHTML = '';
}
else{
doc.getElementById('dMainContent').innerHTML = 'Sorry..Page not available at this time. <br />Please try again later';
doc.getElementById('loadBlank').innerHTML = '';
}
}
if (xmlHttp.readyState < 4){
//Show the loading and the title, but hide the content...
doc.getElementById('ActTitle').innerHTML = pgTitle;
doc.getElementById('dMainContent').innerHTML = '';
}
}
function valCompInfo(){
//First Disable All the elements..
alert('I was hree');
DisEnaAll('CompForm');
//Now..lets validate the entries..
}
function DisEnaAll(contId){
//alert(doc.getElementById(contId).elements);
var theId = doc.getElementById(contId).elements;
try{
var numElems = theId.length;
for (var i=0; i < (numElems - 1); i++){
(theId[i].disabled == false) ? (theId[i].disabled = true) : (theId[i].disabled = false);
}
}
catch(e){
var msg = "The following error occurred: \n\n";
msg += e.description
alert(msg);
}
}
// http://www.webdeveloper.com/forum/showthread.php?t=138830
function parseScript(_source) {
var source = _source;
var scripts = new Array();
// Strip out tags
while(source.indexOf("<script") > -1 || source.indexOf("</script") > -1) {
var s = source.indexOf("<script");
var s_e = source.indexOf(">", s);
var e = source.indexOf("</script", s);
var e_e = source.indexOf(">", e);
// Add to scripts array
scripts.push(source.substring(s_e+1, e));
// Strip from source
source = source.substring(0, s) + source.substring(e_e+1);
}
// Loop through every script collected and eval it
for(var i=0; i<scripts.length; i++) {
try {
eval(scripts[i]);
}
catch(ex) {
// do what you want here when a script fails
}
}
// Return the cleaned source
return source;
}
此代码是在主页上在JavaScript是
<div id="dMainContent">
</div>
</body>
</html>
而国际泳联LLY,我通过AJAX加载页面的那是代码内容..
<div style="width:738px" id="CompForm">
<div class="tdright">
<a href="#" class="lnkBtn" onclick="valCompInfo();"><?php echo $btnNm; ?></a>
</div>
</div>
..
感谢
添加JavaScript函数或外部JS文件到原来的页面。
是的,我已经做到了这一点.. 现在,当我呼吁包含在外部脚本中的fucntion,它工作正常,但停止时,功能需要或来自我通过ajax加载内容中的元素来到 谢谢 – Nuel 2010-06-30 14:17:05
编辑:每个评论的注释:这不是答案:)请参阅评论为什么细节。
留下的答案只是作为一种学习援助建议。
不应该
xmlHttp.onreadystatechange = loadingContent;
是
xmlHttp.onreadystatechange = loadingContent();
或
loadingContent();
,如果你想给它分配一样,该函数返回一个值...
那么,我真的知道为什么,但.. xmlhttp.onreadystatechange = loadingContent;作品。我观察到 xmlhttp.onreadystatechange = loadingContent();只有工作,如果我这样说吧.. xmlhttp.onreadystatechange = loadingContent(){// 一些内容在这里... } 但都是一样的,无论是作品。 我juat不知道为什么我通过ajax带来的内容无法被javascript函数读取 – Nuel 2010-06-30 15:40:17
**不,它不是!!他分配了一个事件处理程序。 – SLaks 2010-06-30 18:57:24
是啊,我非常愚蠢地看着它的方式:(也许我应该删除这个答案... – 2010-07-01 12:09:44
这不是JavaScript ....
doc.getElementById(contId).elements
但用于你的JavaScript ......你绝对不会得到任何东西。(空)
我不认为这是合法的:
theId[i].disabled == false
的问题是与div标签(ID “CompForm”),这是不是一个HTML表单。
“elements”是表单元素not div元素的集合。所以当试图访问div.elements属性是未定义的。
见MSDN,form.elements是(根据MSDN)
http://msdn.microsoft.com/en-us/library/ms537449%28v=VS.85%29.aspx
谢谢..这个回复是非常有用的..但我想补充一点.. 让我们甚至同意,“元素”是一个表单元素的集合,为什么它的div(与ID - 'compForm') ,我用Ajax加载到另一个div的innerHTML(用id - 'dMainContent'),我无法从我的JavaScript代码访问该div? 为什么它返回空? 谢谢.. – Nuel 2010-07-05 07:49:20
不知道我是否完全理解了你的问题,但我相信这是因为id与document.getElementById()一起使用时需要'CompForm'而不是'compForm'。它是区分大小写的,它应该与HTML中的内容匹配。当然,您需要确保'CompForm'div标签已经被添加到DOM中。 – airmanx86 2010-07-05 09:15:14
张贴代码DOM级别1的一部分请。 – 2010-06-30 13:55:53
可能是我,但我从来没有见过DOM节点的属性*元素* var theId = doc.getElementById(contId).elements;';是在W3规范? – FK82 2010-06-30 21:33:57
注意不要将C#.net的东西混合到您的JavaScript中 – bcm 2010-07-03 17:18:06