Javascript регистрирует событие для объекта

У меня есть объект activex, который я загрузил на страницу html. Затем я использую этот объект activex для создания другого объекта, но мне нужно зарегистрировать событие с новым созданным объектом. Объект ожидает прослушиватель событий определенного типа.

Я могу загрузить эту же dll в C#, и она будет работать нормально. Код для C# выглядит так.

upload = obj.constructUploadObj(uploadConfig);
upload.stateChanged += new UploadActionEvents_stateChangedEventHandler(upload_stateChanged);

В javascript у меня есть аналогичный код, но я не могу зарегистрировать событие с помощью объекта.

uploadAction = obj.constructUploadObj(uploadConfig);
uploadAction.stateChanged = upload_stateChanged;

function upload_stateChanged(sender){
    writeLine("uploadState changed " + sender.getState());
}

Я перечислил некоторые свойства объекта uploadAction в javascript, чтобы убедиться, что он действительно создан. Когда я пытаюсь зарегистрировать событие с помощью uploadAction, появляется сообщение об ошибке «Объект не поддерживает это свойство или метод».

Мне кажется, что он ожидает строго типизированного события. Есть ли способ зарегистрировать событие, подобное событию C# в javascript?

Заранее спасибо.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 608
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ваш javascript должен выглядеть примерно так:

function uploadAction::stateChanged( parms )
{
    // ...
    // implementation
    // ...
}

Обратите внимание, что это объявление статической функции, предполагающее, что у вас есть объект Active X с именем 'uploadAction'. Я знаю, что это действительно работает - мы используем это в моей компании.

Если я попытаюсь написать такую ​​функцию в своем JS, она полностью выйдет из строя.

JustLogic 16.10.2008 20:50

UploadAction не является объектом activex. Объект activex позволяет сказать, что axObj имеет конструктивную функцию axObj.constructUpload, которая создает объект uploadAction. Я вызвал функцию в uploadAction после ее создания, чтобы убедиться, что что-то там есть.

JustLogic 16.10.2008 20:52

Сообщение об ошибке означает, что uploadAction не поддерживает свойство stateChanged. Ваш код javascript выглядит правильно, проблема, похоже, связана с объектом, к которому вы пытаетесь прикрепить обработчик событий.

Когда я загружаю dll в VS 2005 и ссылаюсь на объект загрузки, созданный в C#, свойство stateChanged появляется как событие, которому я могу назначить функцию обработчика. Как показано в приведенном выше коде.

JustLogic 16.10.2008 20:55

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

uploadAction.addEventListener('stateChanged', upload_stateChanged, false);

обратите внимание, вам может потребоваться опросить ваши аргументы для метода upload_stateChanged, поскольку первым аргументом должно быть состояние события. например: upload_stateChanged(evt, sender) ...

Ответ принят как подходящий

У компании выяснилось, что эти свойства недоступны через javascript. Им потребуется экстернализировать их для использования в javascript.

Другие вопросы по теме