Здаравствуйте, пишу скрипт для GreaseMonkey, что-то наподобие телефонной книги. В сам скрипте создаётся DIV, внутри которого имеются 2 формы. Внутри каждой формы таблица, в которой и разбиты элементы. DIV создаётся при помощи .appendChild, содержание уже как innerHTML.  После создания DIVа указатели на формы при помощи .getElementById заносятся в переменные класса. Всем элементам форм присвоены аттрибуты name. На кнопки формы навешаны обработчики при помощи .addEventListener, так же являются методами класса. Проблема в следующем: при клике на кнопку, вызывается нужный обработчик, в котором необходимо обратится к полям формы, но при попытке ипользовать конструкцию FormVar.ElementName или  FormVar.elements["ElementName"] элемент undefined. Если же обратится как FormVar.elements[ElementIndex], то всё в порядке. Есть ли какой-либо другой выход, так как обращение по индексу мне не подходит, а использовать .getElementById на все элементы формы не хотелось бы. Зарание спасибо. Ниже приведена часть скрипта относящаяся к проблеме.

Выделить код

Код:

var SMSSenderWindow = {
    MainWindow: null,
    fForm: null,
    fPhonebook: null,

    ...

    CreateWindow: function ()
    {
        var fWindow = document.createElement("DIV");
        fWindow.id = "SMSSenderWindow";
        fWindow.innerHTML = ""

        ...

        + "<form id='SMSSenderPhonebookForm' name='SMSSenderPhonebookForm'>"
        + "    <table id='SMSPhonebookTable' class='smsTable' style='display: none;'>"

        ...

        + "        <tr id='SMSPBDetailBox' style='display: none;'>"
        + "            <td style='border-bottom: 2px #000000 solid;'>"
        + "                Name: "
        + "                <input type='text' id='SMSPBPDetailName' name='PhonebookName'>"
        + "                <br>"
        + "                Operators: "
        + "                <select id='SMSPBDetailOperators'>"
        +                         OperatorsSelect
        + "                </select>"
        + "                Phone: +7"
        + "                <input type='text' id='SMSPBDetailPhoneCode' maxlength='3' name='PhonebookPhoneCode'>"
        + "                <input type='text' id='SMSPBDetailPhoneNumber' name='PhonebookPhoneNumber'>"
        + "                <br>"
        + "                <center>"
        + "                    <input type='button' class='smsPBButtonsDetailBox' id='SMSPBDetailOK' value='OK'>"
        + "                    <input type='button' class='smsPBButtonsDetailBox' id='SMSPBDetailCancel' value='Cancel'>"
        + "                <center>"
        + "            </td>"
        + "        </tr>"

        ...

        + "    </table>"
        + "</form>";

        this.MainWindow = document.body.appendChild(fWindow);
        this.fSend = document.getElementById('SMSSenderSendForm');
        this.fPhonebook = document.getElementById('SMSSenderPhonebookForm');

        ...

        document.getElementById('SMSPBDetailOK').addEventListener('click', this.OnPhonebookDetailOk, false);
        document.getElementById('SMSPBDetailCancel').addEventListener('click', this.OnPhonebookDetailCancel, false);;
    },

    ...

    OnPhonebookDetailOk: function ()
    {
        ...
        // Вот в таких обращениях получаю undefined элемента формы
        AbonentUnit.Name = SMSSenderWindow.fPhonebook.PhonebookName.value;
        AbonentUnit.PhoneCode = SMSSenderWindow.fPhonebook.PhonebookPhoneCode.value;
        AbonentUnit.PhoneNumber = SMSSenderWindow.fPhonebook.PhonebookPhoneNumber.value;
        ...
    },

    ...
};

http://wiki.greasespot.net/XPCNativeWrapper#Named_Items

Я подозревал что дело в этой обёртке, спасибо за помощь.

извините, если пишу не туда... Можете сказать можно ли в greasemonkey сделать скрипт который бы нажымал бы ссылку на оприделенной стоанице... и как можно это сделать???? за ранее спасибо!!!

ksbe
Посмотрите здесь - обсуждался схожий вопрос. Возможно, удастся обойтись без всяких скриптов - тем же iMacros, например.