IHTMLSelectElement::put_onchange 动态添加的事件不起作用

我喝多了 2020-01-19 03:01:47

CComQIPtr<IHTMLSelectElement> pSelect = pDisp;
pSelect->put_onchange(CComVariant(L"VauleChange()"));


pSelect 是动态创建的元素, onchange也是动态添加的事件,

VauleChange()脚本函数在网页里面.

添加之后获取网页源码, 元素和事件确实都添加成功, 跟网页中自带的Select控件属性, 除了ID不同, 其他都一样.

问题是, 网页中自带的 Select控件的 onchange起作用, 我动态添加的就不起作用.

不知为何. 请大侠来解释一下.
...全文
225 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2020-01-24
  • 打赏
  • 举报
回复
put_onchange的文档不是说了参数类型需要是VT_DISPATCH的VARIANT么?你传个字符串算怎么回事? 你这代码put_onchange应该给你返回错误值87——非法参数。
蒋晟 2020-01-24
  • 打赏
  • 举报
回复
真要加脚本的话是这样 spBodyElement->QueryInterface(IID_IHTMLElement2, (void**)&spBodyElement2); spDoc->createElement(bstrScriptElementType, &spScriptElement); spScriptElement->QueryInterface(IID_IHTMLScriptElement,(void**)&spScript ); spScript->put_defer(VARIANT_TRUE); spScript->put_text(bstrScript); spBodyElement2->insertAdjacentElement(bstrInsertAfterBegin, spScriptElement, NULL); 然后等spScript的HTMLElementEvents2::onreadystatechange触发——或者你用定时器等也可以 脚本引擎的默认全局对象是window,可以用IDispatch::GetIDsOfNames DISPATCH_METHOD | DISPATCH_PROPERTYGET获得windows对象的同名函数的IDispatch接口,然后再传递给onchange。 查看源代码是走的IPersistStreamInit不会体现你在脚本级别做的修改,比如put_onchange。这个理论上要用IHTMLDOMNode但是我不确定你的更改会反映到IPersistStreamInit的结果上去。可能需要进入编辑模式再退出来。
我喝多了 2020-01-20
  • 打赏
  • 举报
回复
没有大侠知道怎么回事么
我喝多了 2020-01-19
  • 打赏
  • 举报
回复
我把动态创建的元素和事件, 代码拷贝出来放到网页里面,
不做任何修改. 事件是有作用的.

就是不知道为什么动态添加的就不好使呢
我喝多了 2020-01-19
  • 打赏
  • 举报
回复
不光是 put_onchange 无效, 动态添加的其他事件也是无效的, 求解啊
jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签 1.3.6更新 Bug treegrid: getChecked方法不能返回正确的行. fixed. tree: 异步树,在onlyLeafCheck:true时复选框不显示正确. fixed. Improvement treegrid:继承datagrid组件所有的selecting和checking方法。 linkbutton:图标对齐方式,支持值:'top','bottom','left','right'。 linkbutton:添加"size"属性,支持值:'small','large'。 linkbutton:添加的onClick事件。 menubutton:添加"menuAlign"属性,允许用户设置顶级菜单对齐。 combo:添加"panelAlign"属性,支持值:'left','right'。 calendar:"formatter"、"styler"和"validator"选项可用于自定义日历日期。 calendar:添加onChange事件。 panel:添加"method","queryParams"和"loader"属性。 panel:添加"onLoadError"事件。 datagrid:添加"onBeginEdit"事件。 datagrid:添加"onEndEdit"事件。 datagrid:添加"sort"方法和"onBeforeSortColumn"事件。 datagrid:"combogrid"编辑器集成到datagrid。 datagrid:添加"ctrlSelect"属性,允许使用ctrl+click 多选 slider:添加"converter"选项,允许用户决定如何将一个值转换为滑块的位置或滑块位置值。 searchbox:添加"disabled"属性。 searchbox:添加"disabled","enable","clear","reset"方法。 spinner:添加"readonly"属性、"readonly"方法和"onChange事件

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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