JQuery attr () не возвращается в IE7 - PullRequest
4 голосов
/ 28 июля 2011

Это меня поставило в тупик. Я использую атрибут «for» в некоторых ссылках, чтобы определить элемент, на который они должны воздействовать. В Firefox, IE9 и IE8 все работает нормально, но IE7 ломается и возвращает «undefined».

Вот суть кода jQuery, который я использую:

$(document.ready(function() {
    var editor_icons = $('.edit-button');

    editor_icons.each(function() {
        var $this = $(this),
            parent = $('#' + $this.attr('for'));

        var left = parent.position().left + parent.innerWidth() - 58 - 3,
            top = parent.position().top + 3;

        // ... you get the point ...
    });
});

Пример HTML-элемента, на который он должен воздействовать:

<div id="content_wrapper">
    <a class="edit-button" href="javascript:void(0);" for="index_primary_content" />
    <div id="index_primary_content">
        ....
    </div>
</div>

Прежде чем вы укажете это, я понимаю, что якоря не должны быть автоматически закрывающимися элементами. HTML-код, который я отправляю из моего приложения, <a></a>, и IE интерпретирует его как <a />. Я добавил &nbsp; между элементами, чтобы убедиться, что это не проблема интерпретации, и я получаю точно такую ​​же ошибку.

Проблема в том, что $this.attr('for') возвращает "undefined", поэтому parent.position().left выдает ошибку "объект нулевой или неопределенный".

Я немного покопался в переменных наблюдения, и я вижу, что селекторы работают, и $this в этом контексте выбирает нужные элементы и имеет установленный атрибут "for" ... но jQuery isn ' я думаю, что нашел его.

Как я уже сказал, он отлично работает в Firefox, IE9 и IE8 ... только не в IE7. Идеи?

Для справки я использую jQuery 1.6.2 ...

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

Я полагаю, что это ваша проблема jQuery Bug Ticket

Это потому, что свойство "for" при использовании в HTML на самом деле является "htmlFor", например в меткеэлемент.Это было бы верно для любого из особых случаев в jQuery.props, которые я подозреваю.XML-документы не получают такой специальной обработки, поэтому "для" будет "для" там.Я не уверен, стоит ли это исправлять или просто документировать.

1 голос
/ 28 июля 2011

Вместо for используйте вместо этого пользовательский атрибут; target_ele например.

Ваш редактор будет кричать на вас, но он будет работать.

...