2010-06-30 74 views
1

我有一個腳本,我一直在爲一週的戰鬥。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> &nbsp; 
    </div> 
</div> 

..

感謝

+6

張貼代碼DOM級別1的一部分請。 – 2010-06-30 13:55:53

+0

可能是我,但我從來沒有見過DOM節點的屬性*元素* var theId = doc.getElementById(contId).elements;';是在W3規範? – FK82 2010-06-30 21:33:57

+0

注意不要將C#.net的東西混合到您的JavaScript中 – bcm 2010-07-03 17:18:06

回答

0

添加JavaScript函數或外部JS文件到原來的頁面。

+0

是的,我已經做到了這一點.. 現在,當我呼籲包含在外部腳本中的fucntion,它工作正常,但停止時,功能需要或來自我通過ajax加載內容中的元素來到 謝謝 – Nuel 2010-06-30 14:17:05

-1

編輯:每個評論的註釋:這不是答案:)請參閱評論爲什麼細節。

留下的答案只是作爲一種學習援助建議。

不應該

xmlHttp.onreadystatechange = loadingContent; 

xmlHttp.onreadystatechange = loadingContent(); 

loadingContent(); 

,如果你想給它分配一樣,該函數返回一個值...

+0

那麼,我真的知道爲什麼,但.. xmlhttp.onreadystatechange = loadingContent;作品。我觀察到 xmlhttp.onreadystatechange = loadingContent();只有工作,如果我這樣說吧.. xmlhttp.onreadystatechange = loadingContent(){// 一些內容在這裏... } 但都是一樣的,無論是作品。 我juat不知道爲什麼我通過ajax帶來的內容無法被javascript函數讀取 – Nuel 2010-06-30 15:40:17

+1

**不,它不是!!他分配了一個事件處理程序。 – SLaks 2010-06-30 18:57:24

+0

是啊,我非常愚蠢地看着它的方式:(也許我應該刪除這個答案... – 2010-07-01 12:09:44

0

這不是JavaScript ....

doc.getElementById(contId).elements 

但用於你的JavaScript ......你絕對不會得到任何東西。(空)

我不認爲這是合法的:

theId[i].disabled == false 
+0

在頁面頂部..在JavaScript文件內容中,我已經聲明瞭doc = document;這是因爲我不喜歡在「文檔」中輸入所有類型..對於我的比較 – Nuel 2010-07-05 07:44:42

+0

元素或禁用的相當長的元素不是有效的方法 – bcm 2010-07-05 11:12:22

+0

我認爲元素僅適用於表單元素,而您的是DIV。還禁用只能在輸入文本框等表單元素上工作。禁用示例:document.getElementById('aaa')。disabled; – bcm 2010-07-05 11:25:35

2

的問題是與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

+0

謝謝..這個回覆是非常有用的..但我想補充一點.. 讓我們甚至同意,「元素」是一個表單元素的集合,爲什麼它的div(與ID - 'compForm') ,我用Ajax加載到另一個div的innerHTML(用id - 'dMainContent'),我無法從我的JavaScript代碼訪問該div? 爲什麼它返回空? 謝謝.. – Nuel 2010-07-05 07:49:20

+0

不知道我是否完全理解了你的問題,但我相信這是因爲id與document.getElementById()一起使用時需要'CompForm'而不是'compForm'。它是區分大小寫的,它應該與HTML中的內容匹配。當然,您需要確保'CompForm'div標籤已經被添加到DOM中。 – airmanx86 2010-07-05 09:15:14