Начиная с 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"}));
Причиной этого является то, что 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');
Кроме того, вы можете инициировать событие на элементе в 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
ниже, он может работать или не работать должным образом с помощью модального.