开发平台:Visual Studio 6.0/Visual Studio 2008
ATL类型:ATL控件
已实现接口:IProvideClassInfo2Impl
问题描述:在JavaScript无法动态为ATL控件附加事件在ATL控件中添加了 OnShowText 事件,ShowText 方法var atl = new ActiveXObject("MyPro.MyControl");
atl.OnShowText = function()//这样IE7报错,对象不支持此属性或方法
{
alert("ok");
}atl.attachEvent("OnShowText",eventFun);//这样也报错function eventFun()
{
alert("ok");
}<script event="OnShowText"></script> //这种方式可以正常响应
创建 MFC ActiveX控件存在同样问题,请问各位知道有谁原因吗?
ATL类型:ATL控件
已实现接口:IProvideClassInfo2Impl
问题描述:在JavaScript无法动态为ATL控件附加事件在ATL控件中添加了 OnShowText 事件,ShowText 方法var atl = new ActiveXObject("MyPro.MyControl");
atl.OnShowText = function()//这样IE7报错,对象不支持此属性或方法
{
alert("ok");
}atl.attachEvent("OnShowText",eventFun);//这样也报错function eventFun()
{
alert("ok");
}<script event="OnShowText"></script> //这种方式可以正常响应
创建 MFC ActiveX控件存在同样问题,请问各位知道有谁原因吗?
解决方案 »
- 对list使用临界区是否有效?
- 在MFC中使用正则表达式用那个库更好啊
- 如何设置鼠标坐标位置
- VC 2008里面,“Project”菜单下的“Add Web Reference”项是灰掉的,如何解决?
- 蔡鸟问题 紧急求救!!!
- 程序运行时出的问题
- 如何切分单文档窗口。
- 如何在应用程序中载入Powerpoint文档
- 类导入dll后,某些成员的构造函数不能正确执行,为什么?
- 我在SDI中开了一个CWinThread派生类线程,现在想在CWinThread派生类接受窗口消息,于是想在CWinThread派生类中new一个窗口,请问这怎么实现??
- 局域网 读取共享文件夹的下级出错1203?
- 指令引用的“Ox000000"内存.该内存不能为"read"
function Yfunction() {
atl.ShowText( ); <!- 调用方法 -->
}
</script>
<script language="JavaScript1.2" FOR="atl" EVENT = "OnShowText" > <!-相应事件(只能用事件名称,不能带参数)-->
alert("ok"); <!-使用OnShowText事件发生 即弹出警告框。-->
</script><input id="" type="button" value=" 开 始:" onclick=“Yfunction()" /> <!-按钮调用JavaScript方法,JavaScript再调用控件方法-->JavaScript毕竟是脚本语言 的确有很多局限性 只要了解了它与控件之间交互的过程 尽量避免 还是可以达到一定目的的。
不过我仍然有一些疑问:
(1)腾迅的多文件上传插件没有使用 event for 这样的语法来为他们的控件设置事件,而是使用 attachEvent 语法来设置的。
(2)微软的 XMLHttpRequest 组件可以直接在JavaScript里面设置他们的事件
例如:
<script type="text/javascript">
var xmlhttp;
function loadXMLDoc(url)
{
xmlhttp=null;
if (window.XMLHttpRequest)
{// code for all new browsers
xmlhttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{// code for IE5 and IE6
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
if (xmlhttp!=null)
{
xmlhttp.onreadystatechange = state_Change;//在这里动态设置了事件
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
else
{
alert("Your browser does not support XMLHTTP.");
}
} function state_Change()
{
if (xmlhttp.readyState==4)
{// 4 = "loaded"
if (xmlhttp.status==200)
{// 200 = OK
// ...our code here...
}
else
{
alert("Problem retrieving XML data");
}
}
}
</script>
==============
这就是关键!xmlhttp组件本身有一个可设置的onreadystatechange属性,所以上面的赋值相当于设置一个属性值,这不是连接点。还是上面说的,你也可以添加一个OnShowText属性。