События карусели не стреляют [дубликаты]

Начиная с Framework v4.5 вы можете использовать Activator.CreateInstanceFrom (), чтобы легко создавать классы в сборках. В следующем примере показано, как его использовать и как вызвать метод, передающий параметры и возвращающее значение.

  // Предполагая, что moduleFileName содержит полный или действительный относительный путь к сборке var moduleInstance = Activator.CreateInstanceFrom (  moduleFileName, "MyNamespace.MyClass");  МетодInfo mi = moduleInstance.Unwrap (). GetType (). GetMethod («MyMethod»);  // Предполагая, что метод возвращает логическое значение и принимает один строковый параметр bool rc = Convert.ToBoolean (mi.Invoke (moduleInstance.Unwrap (), новый объект [] {"MyParamValue"}));   
16
задан dugla 13 June 2014 в 18:51
поделиться

1 ответ

Причиной этого является то, что Twitter Bootstrap использует that.$element.trigger('hidden.bs.modal') ( line 997 ) для запуска своих событий. Другими словами, он использует .trigger .

Теперь jQuery отслеживает обработчики событий каждого элемента (все .on или .bind или .click и т. Д.), Используя ._data. Это связано с тем, что нет другого способа получить обработчики событий , которые связаны (используя .addEventListener) с элементом. Таким образом, метод триггера фактически получает только установленный исполнитель (ы) события / обработчик (ы) из ._data(element, 'events') & amp; ._data(element, 'handle') в качестве массива и запускает каждый из них.

handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
if ( handle ) {
    handle.apply( cur, data );
}

( строка 4548 )

Это означает, что независимо от контекста, если событие связано через .addEventListener, оно не будет работать с помощью .trigger. Вот пример. При загрузке регистрируется только jquery (срабатывает .trigger). Если вы нажмете на элемент a, хотя оба будут работать.

$('a')[0].addEventListener('click', function(){console.log('addlistener');}, false);

$('a').on('click', function(){
    console.log('jquery');
});

$('a').trigger('click');

DEMO

Кроме того, вы можете инициировать событие на элементе в javascript с использованием fireEvent (т.е.) & amp; dispatchEvent (не есть). Я не обязательно понимаю или знаю, что аргументы jQuery's .trigger не делают этого, но они могут иметь или не иметь этого. После немного больше исследований я обнаружил, что они этого не делают, потому что некоторые старые браузеры поддерживали только 1 обработчик событий на событие.

В общем, мы не пытались реализовать функциональность, которая работает только на некоторых браузерах (и некоторых событиях), но не на всех, так как кто-то сразу же сообщит об ошибке, что она не работает правильно.

Хотя я не рекомендую его, вы можете обойти это с минимальным количеством изменений кода загрузки. Вам просто нужно убедиться, что функция, приведенная ниже, прикреплена первой (или у вас будут два раза подряд слушатели).

$(modalID).on('hidden.bs.modal', function (e, triggered) {
    var event; // The custom event that will be created

    if(!triggered){
        return false;
    }

    e.preventDefault();
    e.stopImmediatePropagation();

    if (document.createEvent) {
        event = document.createEvent("HTMLEvents");
        event.initEvent("hidden.bs.modal", true, true);
    } else {
        event = document.createEventObject();
        event.eventType = "hidden.bs.modal";
    }

    event.eventName = "hidden.bs.modal";

    if (document.createEvent) {
        this.dispatchEvent(event);
    } else {
        this.fireEvent("on" + event.eventType, event);
    }
});

Наконец, измените строку Twitter Bootstrap сверху:

that.$element.trigger('hidden.bs.modal', true)

Это значит, что вы знаете, что его запускают, а не событие, которое вы стреляете в себя после. Пожалуйста, имейте в виду, что я не пробовал этот код с модальным. Несмотря на то, что он работает на демо click ниже, он может работать или не работать должным образом с помощью модального.

DEMO

20
ответ дан Community 16 August 2018 в 00:57
поделиться
  • 1
    Чувак, это было эпопее. Я разработчик iOS, новичок в JS, поэтому мой разум подходит к работе. Для этого проекта я должен использовать чистую JS, где это возможно. Что такое чистый JS эквивалент вам замечательной диссертации? Приветствия. – dugla 13 June 2014 в 22:05
Другие вопросы по тегам:

Похожие вопросы: