Динамически добавленный JavaScript не находит динамически добавленные поля в IE - PullRequest
0 голосов
/ 10 ноября 2009

У меня есть таблица, в которой есть кнопка «Добавить строки».Эта кнопка добавляет строку динамически с JQuery.Он работает путем копирования первого ... и затем замены всех id = ".." на увеличенное число.

Проблема состоит в том, что строки имеют автозаполнение YUI, которое выглядит следующим образом:

<td>
    <input type="hidden" name="location_num[0]" value="508318" maxLength="25" style="width:230px" id="location_num[0]"/>
    <input type="textbox" name="location_numDisplayDesc[0]" value="WINNIPEG" maxLength="25" style="width:230px" id="location_numDisplayDesc[0]"/>
    <div id="Container_location_num[0]" style="display:inline;"></div>

    <script type="text/javascript">

        // Initialize autocomplete
        var location_numAC = new YAHOO.widget.AutoComplete(
            "location_numDisplayDesc[0]",
            "Container_location_num[0]",
            locationDataSource,
            acConfig);

        location_numAC.useShadow = true
        location_numAC.useIFrame = true
        location_numAC.dataErrorEvent.subscribe(acErrorFunction);

        // Format results to include the reference number
        location_numAC.formatResult = function(resultItem, query) {
            return resultItem[0];
        };

        // Clear key before request
        location_numAC.dataRequestEvent.subscribe(function fnCallback(e, args) {
        YAHOO.util.Dom.get("location_num[0]").value = ""; });

        // Set key on item select
        location_numAC.itemSelectEvent.subscribe(function(event, args) {
            YAHOO.util.Dom.get("location_num[0]").value = args[2][1];
        });

        // Clear key when description is cleared
        location_numAC.textboxBlurEvent.subscribe(function fnCallback(e, args) {
            if (isEmpty(YAHOO.util.Dom.get("location_numDisplayDesc[0]").value)) {
                YAHOO.util.Dom.get("location_num[0]").value = "";
            } // end if
        });
    </script>
</td>

Этот код отлично работает в Firefox, и только что созданные автозаполнения работают, но в IE (6 и 7) я получаю ошибку, которая означает, что location_num_AC не создается успешно.Я полагаю, что это потому, что он не читает вновь созданные входы или div, как следует.Я пытался обернуть javascript

$("Container_location_num[0]").ready(function {...});

, но это не сработало.У кого-нибудь есть другие идеи?

1 Ответ

2 голосов
/ 10 ноября 2009

Поля формы, которые вставляются в DOM в IE, не добавляются в коллекцию форм, как вы могли бы ожидать.

Обычно вы можете обратиться к полю формы одним из двух способов:

document.forms[0]["myFormName"];
document.forms[0][12];

То есть по имени поля формы или по индексу. Но когда вы добавляете поле формы к DOM в IE, вы не можете ссылаться на него по имени, только по его индексу. Если ваш код (или любой другой вспомогательный код) ищет поле формы в коллекции по имени, у вас, очевидно, возникла проблема.

Если ваш единственный ключ - это имя, вы можете просмотреть все поля формы по индексу и найти то, что ищете, но это, очевидно, будет линейная операция. Вы также можете просматривать циклы и находить, какие поля формы индексируются численно, но не по имени, и обновлять объект формы самостоятельно.

Мне не хватает деталей, чтобы знать, как (или если) это происходит в вашем проекте, но это одна из тех странностей IE, которая звучит так, как будто она играет роль, поскольку вы добавляете поля динамически.

...