проблемы с определением функции jquery в Internet Explorer? - PullRequest
0 голосов
/ 16 апреля 2011

Я создал инструмент javascript, используя плагин beautytips, который использует beautytips для отображения меню параметров списка, с которыми я затем связываю действия.

Я начинаю с простого div, чтобы определить пункты меню

<div id="menu-div">
   <a href="javascript:;" id="link-one">text link one</a><br />
   <a href="javascript:;" id="link-two">text link two</a><br />
   <a href="javascript:;" id="link-three">text link three</a><br />
</div>

, а затем создаем экземпляр подсказки красоты с помощью следующего кода:

    $("#menu-toggle").bt({
        contentSelector: "$('#menu-div').html()",
        preShow: function(box) {
        $("a[id^=link-]").click(function() {
           //do something
        });
    });

Я добавил функцию «preShow», потому что по какой-то причине он не находил идентификаторы «link-» до тех пор, пока div не был включен .. (?). Это отлично работает в Firefox, Safari и Chrome, так как я могу щелкнуть переключатель меню, просмотреть три ссылки, щелкнуть первую ссылку и получить правильное действие первой ссылки и т. Д.

Это нормально работает и в Internet Explorer, но только в первый раз. Во второй раз (нажмите, чтобы отобразить меню, нажмите другую ссылку), Internet Explorer не может найти те же идентификаторы.

Нужно ли отменять привязку функции после закрытия меню?

Вот как советы по красоте обрабатывают функцию preShow:

// trigger preShow function
// function receives the box element (the balloon wrapper div) as an argument
opts.preShow.apply(this, [$box[0]]);

Ответы [ 2 ]

0 голосов
/ 18 апреля 2011

Спасибо всем за предложения - я думаю, что я решил это после того, как вернулся к своему вопросу и понял, что мне просто нужно найти способ отсоединять обработчик событий каждый раз, чтобы это работало в Internet Explorer. BeautyTips имеет обратный вызов post-hide, который идеально подходит для этого, поэтому я применил следующий код:

postHide: function(box) { 
        $("a[id^=link-]").unbind();
    },

и это работало, как и ожидалось, во всех браузерах. Кто-нибудь знает хороший ресурс для понимания, почему обработка событий будет работать по-другому в Internet Explorer?

0 голосов
/ 16 апреля 2011

Этот код выглядит так, как будто отсутствует фигурная скобка

$("#menu-toggle").bt({
    contentSelector: "$('#menu-div').html()",
    preShow: function(box) {
      $("a[id^=link-]").click(function() {
        //do something
      });
    } // this curly brace was missing
});
...