Ошибка JavaScript: NS_ERROR_XPC_BAD_CONVERT_JS - PullRequest
1 голос
/ 30 ноября 2011

Я получаю эту ошибку JavaScript, некоторые исследователи говорят что-то о создании объекта.

function generateRow() {    
    var i = pageCounter.getIP_count();
    //common sense counting
    i++;
    var objNEWVIP = document.getElementById("IP_row_new");
    var objMODIFYVIP = document.getElementById("IP_row_modify");

    //common DOM elements
    var memberNum = document.createTextNode('Member IP'+ i + '\u00a0');
    var brNode = document.createElement('br');
    var nbspSpace = document.createTextNode('\u00a0');
    var resolvesTextNode = document.createTextNode('Resolves: \u00a0');

    //new_IP_Octet1_Element
    var new_IP_Octet1_Element = document.createElement('input');
    new_IP_Octet1_Element.setAttribute('type','text');
    new_IP_Octet1_Element.setAttribute('maxlength','3');
    new_IP_Octet1_Element.setAttribute('size','3');
    new_IP_Octet1_Element.setAttribute('name','IP'+i+'_octet1');
    new_IP_Octet1_Element.setAttribute('id','IP'+i+'_octet1');
    new_IP_Octet1_Element.setAttribute('value','167');
    new_IP_Octet1_Element.setAttribute('size','3');
    new_IP_Octet1_Element.setAttribute('hostname','IP'+i+'_hostname');
    new_IP_Octet1_Element.onchange =  function () { resolveMe(this.id); };
    //new_IP_Octet1_Element.setAttribute('onchange', 'resolveMe(this.id);');

    //new_IP_Octet2_Element
    var new_IP_Octet2_Element = document.createElement('input');
    new_IP_Octet2_Element.setAttribute('type','text');
    new_IP_Octet2_Element.setAttribute('maxlength','3');
    new_IP_Octet2_Element.setAttribute('size','3');
    new_IP_Octet2_Element.setAttribute('name','IP'+i+'_octet2');
    new_IP_Octet2_Element.setAttribute('id','IP'+i+'_octet2');
    new_IP_Octet2_Element.setAttribute('value','69');
    new_IP_Octet2_Element.setAttribute('size','3');
    new_IP_Octet2_Element = function () { resolveMe(this.id); };
    //new_IP_Octet2_Element.setAttribute('onchange', 'resolveMe(this.id);');

    //new_IP_Octet3_Element
    var new_IP_Octet3_Element = document.createElement('input');
    new_IP_Octet3_Element.setAttribute('type','text');
    new_IP_Octet3_Element.setAttribute('maxlength','3');
    new_IP_Octet3_Element.setAttribute('size','3');
    new_IP_Octet3_Element.setAttribute('name','IP'+i+'_octet3');
    new_IP_Octet3_Element.setAttribute('id','IP'+i+'_octet3');
    new_IP_Octet3_Element.setAttribute('value','0');
    new_IP_Octet3_Element.setAttribute('size','3');
    new_IP_Octet3_Element = function () { resolveMe(this.id); };
    //new_IP_Octet3_Element.setAttribute('onchange', 'resolveMe(this.id);');

    //new_IP_Octet4_Element
    var new_IP_Octet4_Element = document.createElement('input');
    new_IP_Octet4_Element.setAttribute('type','text');
    new_IP_Octet4_Element.setAttribute('maxlength','3');
    new_IP_Octet4_Element.setAttribute('size','3');
    new_IP_Octet4_Element.setAttribute('name','IP'+i+'_octet4');
    new_IP_Octet4_Element.setAttribute('id','IP'+i+'_octet4');
    new_IP_Octet4_Element.setAttribute('value','0');
    new_IP_Octet4_Element.setAttribute('size','3');
    new_IP_Octet4_Element = function () { resolveMe(this.id); };
    //new_IP_Octet4_Element.setAttribute('onchange', 'resolveMe(this.id);');

    //make SPAN for DNS reverse resolution
    var reverseDNS_Element = document.createElement('span');
    reverseDNS_Element.setAttribute('id','IP'+i+'_hostname');
    reverseDNS_Element.setAttribute('name','IP'+i+'_hostname');

    //output
    if (document.getElementById('requesttype').value == "new") {
        objNEWVIP.appendChild(memberNum);
        objNEWVIP.appendChild(new_IP_Octet1_Element);
        objNEWVIP.appendChild(nbspSpace);
        objNEWVIP.appendChild(new_IP_Octet2_Element);
        objNEWVIP.appendChild(nbspSpace);
        objNEWVIP.appendChild(new_IP_Octet3_Element);
        objNEWVIP.appendChild(nbspSpace);
        objNEWVIP.appendChild(new_IP_Octet4_Element);
        objNEWVIP.appendChild(nbspSpace);
        objNEWVIP.appendChild(resolvesTextNode);
        objNEWVIP.appendChild(reverseDNS_Element);
        objNEWVIP.appendChild(brNode);
    }
     if (document.getElementById('requesttype').value == "modify") {
        objMODIFYVIP.appendChild(memberNum);
        objMODIFYVIP.appendChild(new_IP_Octet1_Element);
        objMODIFYVIP.appendChild(nbspSpace);
        objMODIFYVIP.appendChild(new_IP_Octet2_Element);
        objMODIFYVIP.appendChild(nbspSpace);
        objMODIFYVIP.appendChild(new_IP_Octet3_Element);
        objMODIFYVIP.appendChild(nbspSpace);
        objMODIFYVIP.appendChild(new_IP_Octet4_Element);
        objMODIFYVIP.appendChild(nbspSpace);
        objMODIFYVIP.appendChild(resolvesTextNode);
        objMODIFYVIP.appendChild(reverseDNS_Element);
        objMODIFYVIP.appendChild(brNode);
    }
    pageCounter.addMethod("ip_count"); //increment after adding row
}

generateRow () функция вызывается, когда пользователь нажимает кнопку.

Какой объект я создаю ... и как мне это сделать?

Я думаю, что проблема заключается в

var objNEWVIP = document.getElementById("IP_row_new");
var objMODIFYVIP = document.getElementById("IP_row_modify");

Но я не уверен, как создать новый объект в этом месте ...

Вот функция счетчика

function counterObj(){
    //object to keep track of all counts across all forms
    this.ipCountTotal = 0;
    this.dnsElementTotal = 0;
    this.approverTotal = 0;
    //input methods mapping
    this.clear = clearing;
    this.addMethod = add; 

    //retreval methods mapping
    this.getIP_count = function() { return(this.ipCountTotal);};
    this.getDNS_count = function() { return(this.dnsElementTotal);};
    this.getApprover_count = function() { return(this.approverTotal);};

    //addMethod
    function add(strType){
        switch(strType) {
            case "dns_count":
                this.dnsElementTotal++;
                break;
            case "ip_count":
                this.ipCountTotal++;
                break;
            case "approver_count":
                this.approverTotal++;
                break;
        } //end swtich strType

    }



    //clear all
    function clearing(){
        this.ipCountTotal = 0;
        this.dnsElementTotal = 0;
        this.approverTotal = 0;
    }

}

Вот объявление:

var pageCounter = new counterObj();
 pageCounter.clear()

Вот HTML DIV

<div id="ip_row_new" title="please provide the ip address of each endpoint member.">

</div>

и ...

<div id="IP_row_modify">
            <!-- dynamically adds new rows -->
</div>

Вот оператор выбора в HTML, который пользователь выберет ....

<select id="requesttype" name="requestType"  onChange="checkF5Request(this.value);" tabindex="2">
                    <option value="...">...</option>
                    <option value="new">New Request</option>
                    <option value="modify">Modify Request</option>
                    <option value="delete">Removal Request</option>
                    <option value="iRule_redirect">iRule Redirect</option>

                    </select>

Вот ошибка:

Error: uncaught exception: [Exception... "Could not convert JavaScript argument arg 0 [nsIDOMHTMLDivElement.appendChild]"  nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"  location: "JS frame :: https://request.psp :: generateRow :: line 358"  data: no]

Ответы [ 2 ]

0 голосов
/ 02 декабря 2011

Спасибо, Николай. Вы вывели меня на правильный путь.

Проблема была в различиях с этими четырьмя строками.

new_IP_Octet1_Element.onchange =  function () { resolveMe(this.id); };
new_IP_Octet2_Element =  function () { resolveMe(this.id); };
new_IP_Octet3_Element =  function () { resolveMe(this.id); };
new_IP_Octet4_Element =  function () { resolveMe(this.id); };

Необходимо добавить свойство .onchange к объекту DOM.

new_IP_Octet1_Element.onchange =  function () { resolveMe(this.id); };
new_IP_Octet2_Element.onchange =  function () { resolveMe(this.id); };
new_IP_Octet3_Element.onchange =  function () { resolveMe(this.id); };
new_IP_Octet4_Element.onchange =  function () { resolveMe(this.id); };
0 голосов
/ 02 декабря 2011

Итак, ваша new_IP_Octet2_Element - это функция:

new_IP_Octet2_Element = function () { resolveMe(this.id); };

.. который не может быть передан appendChild(), для которого требуется узел DOM.

Я не уверен, какой смысл этой функции, но если вы удалите ее, ошибка на objNEWVIP.appendChild(new_IP_Octet2_Element); должна исчезнуть.

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