Javascript не распознает динамическое содержимое div - PullRequest
1 голос
/ 30 июня 2010

У меня есть скрипт, с которым я борюсь сейчас уже неделю.

У меня есть страница с div с id ("content").Теперь я загрузил некоторый контент, форму, содержащуюся в теге div, чтобы быть конкретным, в этот div VIA Ajax, и он прекрасно отображает

Теперь проблема в том, что - когда форма отправлена, я вызываюфункция, которая отключит все поля элемента в этом теге div.Я всегда получаю ошибку «undefined».

Кажется, что div, который я ввел на страницу, не распознается javascript ..

Я искал в Google, Bing, Yahoo..я просто еще не нашел решение ...

Пожалуйста, что мне делать ??

Я включил код ниже -

+++++++++ Код ниже для моего внешнего файла 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>

И, наконец, содержимое страницы, которую я загружаю через AJAX ..

<div style="width:738px" id="CompForm">
    <div class="tdright">
        <a href="#" class="lnkBtn" onclick="valCompInfo();"><?php echo $btnNm; ?></a> &nbsp;
     </div>
</div>

Это код ..

Спасибо

Ответы [ 4 ]

2 голосов
/ 04 июля 2010

Проблема связана с тегом div (id "CompForm"), который не является формой HTML.

"elements" - это коллекция элемента формы, а не элемента div.Поэтому при попытке доступа к div.elements свойство не определено.

См. MSDN, form.elements является частью уровня DOM 1 (согласно MSDN)

http://msdn.microsoft.com/en-us/library/ms537449%28v=VS.85%29.aspx

0 голосов
/ 30 июня 2010

РЕДАКТИРОВАТЬ: Примечание к комментариям: это не ответ :) См. Комментарии для деталей почему.

Оставлено в качестве ответа просто в качестве учебного пособия, как предложено.

Не должно

xmlHttp.onreadystatechange = loadingContent; 

быть

xmlHttp.onreadystatechange = loadingContent(); 

или

loadingContent();

и эта функция должна возвращать значение, если вы хотите присвоить его таким образом ...

0 голосов
/ 03 июля 2010

это не JavaScript ....

doc.getElementById(contId).elements

, но используется в вашем JavaScript ... вы точно ничего не получите.(ноль)

Не думаю, что это также верно:

theId[i].disabled == false
0 голосов
/ 30 июня 2010

Добавьте ваши функции Javascript или внешний файл JS на исходную страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...