JavaScript中的函数参数传值问题?

AmyLin_2001 2010-02-20 10:24:31
遇到这样的问题

通过javascript来响应ActiveX中的事件,但事件的参数是传址的,在javascript中怎么样才能改变参数的值?

ActiveX 事件中的OnCloseDocument的原型是
void OnCloseDocument(BOOL* bShow, short * nResult);
需要在事件响应的时候,去设置bShow和nResult的值。在javascript中要怎样才能正常使用这样的事件接口?
Java 中能否做到?
我是C++开发人员,对JavaScript不了解,紧急求救ing!

是不是像 JavaScript这样的脚本语言无法支持类似这样的事件接口?

下面是我的代码

<head>
<script type='text/javascript'>
function init() {
// 跳转处理
var handler = function(bshow,nResult){
alert('OnCloseDocument');
alert(bshow);
alert(nResult);
bShow = false; //这里的设置没有效果
nResult = 0; //这里的设置没有效果
alert(bshow);
alert(nResult);
};

//var viewer = document.getElementById('AXCtrl');

if(AXCtrl.addEventListener) {
AXCtrl.addEventListener('OnCloseDocument', handler, false);
}else if(AXCtrl.attachEvent)
AXCtrl.attachEvent('OnCloseDocument', handler);
else
AXCtrl.OnCloseDocument = handler;
}
</script>
</head>
<body onload="init()">
<object id="AXCtrl" height=450 width=650 CLASSID="clsid:AEC22598-D3E5-790A-TGE8-SFEA90C68B26" />
</body>
</html>
...全文
404 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
AmyLin_2001 2010-02-23
  • 打赏
  • 举报
回复
谢谢大家,javascript 应该是没有办法提供传址的,但问题已经解决了。


PS: 我使用的方法和8楼的想法很类似,客户也同意了这样的方法。

我在ActivX里加了一个两个属性代表bShow和nResult,然后用户在响应这个事件的时候,去修改这个属性的值,ActiveX做了一些调整,在事件被响应后,把属性值赋值给原来的bshow和nResult,问题解决。
tank_2009 2010-02-23
  • 打赏
  • 举报
回复
echo123321 2010-02-23
  • 打赏
  • 举报
回复
引用 3 楼 lzfly 的回复:
你的邮箱是多少?我mail给你。

高手请赐教啊!
w00110601111@163.com
KK3K2005 2010-02-23
  • 打赏
  • 举报
回复
<object id="AXCtrl" bShow = false nResult = 0 height=450 width=650 CLASSID="clsid:AEC22598-D3E5-790A-TGE8-SFEA90C68B26" />

var handler = function(){
alert('OnCloseDocument');
var AXCtrl=documant.getElementById('AXCtrl');
AXCtrl.bShow = false;
AXCtrl.nResult = 0;

};

吧传的内部属性 直接变成外部属性挂在对象上 反正都是handler自己在控制逻辑 所以传不传参数都无所谓 之后控件内部的操作在分析自己的属性 或者属性本身就自己根据变化操作 不知道C++写的是不是可以这样
czl21 2010-02-23
  • 打赏
  • 举报
回复
javascript处理的是浏览器的事件,ActiveX控件的事件消息传不到javascript脚本中。
tuwicn 2010-02-22
  • 打赏
  • 举报
回复
bShow = false; //这里的设置没有效果
nResult = 0; //这里的设置没有效果

bShow改为bshow,另外这两行有效果的,不信你改成这样就看到bshow和nResult已经改变:

function init() {
// 跳转处理
var handler = function(bshow,nResult){
alert('OnCloseDocument');
alert(bshow);
alert(nResult);
bShow = false; //这里的设置没有效果
nResult = 0; //这里的设置没有效果
alert(bshow);
alert(nResult);
};

//var viewer = document.getElementById('AXCtrl');

handler();
}
AmyLin_2001 2010-02-22
  • 打赏
  • 举报
回复
你的邮箱是多少?我mail给你。

高手请赐教啊!
AmyLin_2001 2010-02-22
  • 打赏
  • 举报
回复
谢谢你!

应该是我的代码引起了你的误解,

alert(bshow);
alert(nResult);
bShow = false; //这里的设置没有效果
nResult = 0; //这里的设置没有效果
alert(bshow);
alert(nResult);
================================
bShow改为bshow,另外这两行有效果的,不信你改成这样就看到bshow和nResult已经改变:

确实改成bShow后 alert(bshow); 产生了效果,但是我的问题是要让这里对bShow值得的改变在'OnCloseDocument'事件结束后,仍然还有效果。

就是这里的参数是传址的而不是传值的。

echo123321 2010-02-21
  • 打赏
  • 举报
回复
已开始你就要保证让addEventListener 把正确的参数传递进去,你这个我们也没有办法调试阿,能不能发出一个不带active 控件的例子
cwblaze 2010-02-20
  • 打赏
  • 举报
回复
不会,帮顶。
在Js中调用AS的函数是直接调用object对象的某函数,当然需要在AS中注册。
我想在JS中调用ActiveX也是类似的道理。

另外,现在还用ACTiveX?会不会有点过时了。。

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧