Javascript将事件注册到对象

Javascript将事件注册到对象,javascript,events,activex,Javascript,Events,Activex,我将activex对象加载到html页面中。然后,我使用该activex对象创建另一个对象,但我需要用创建的新对象注册一个事件。该对象需要特定类型的事件侦听器 我可以在c#中加载相同的dll,它可以正常工作。c#的代码如下所示 在javascript中,我有类似的代码,但是我无法将事件注册到对象中 uploadAction = obj.constructUploadObj(uploadConfig); uploadAction.stateChanged = upload_stateChanged

我将activex对象加载到html页面中。然后,我使用该activex对象创建另一个对象,但我需要用创建的新对象注册一个事件。该对象需要特定类型的事件侦听器

我可以在c#中加载相同的dll,它可以正常工作。c#的代码如下所示

在javascript中,我有类似的代码,但是我无法将事件注册到对象中

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

function upload_stateChanged(sender){
    writeLine("uploadState changed " + sender.getState());
}
我列举了javascript中uploadAction对象的一些属性,以确保它确实被创建。当我尝试用uploadAction注册事件时,它会抛出一个错误,说“对象不支持此属性或方法”

对我来说,它似乎期待一个强类型事件。在javascript中是否有类似于C#的注册事件


提前感谢。

您的javascript应该如下所示:

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

请注意,这是一个静态函数声明,假设您有一个名为“uploadAction”的活动X对象。我知道这是可行的-我们在我的公司使用它。

错误消息意味着uploadAction不支持stateChanged属性。您的javascript代码看起来是正确的,问题似乎出在您试图将事件处理程序附加到的对象上。

我建议使用所述的高级事件注册模型

uploadAction.addEventListener('stateChanged',upload\u stateChanged,false)


注意,您可能需要询问
upload_stateChanged
方法的参数,因为第一个参数应该是事件状态。例如:
upload\u stateChanged(evt,sender)
..

从公司发现这些属性无法通过javascript访问。它们需要外部化,以便在javascript中使用。

如果我尝试在JS中编写这样的函数,它将完全崩溃。uploadAction不是activex对象。activex对象让我们假设axObj有一个构造函数axObj.constructUpload,该函数创建uploadAction对象。在uploadAction创建后,我调用了一个函数来验证是否存在某些内容。当我在VS2005中加载dll并引用在c#中创建的upload对象时,stateChanged属性作为一个事件出现,我可以为其分配处理程序函数。如上面代码所示。
function uploadAction::stateChanged( parms )
{
    // ...
    // implementation
    // ...
}