微信小程序,怎么在js里触发组件?
发布于 6 年前 作者 qiangtan 11064 次浏览 来自 问答

例如,定义了一个picker组件,运行正常,手动触控它会完美正确执行。但是现在新需求,需要在js里,主动利用程序触发组件,不知道怎么实现。

一般js里可以这样触发

function load(){    //下面两种方法效果是一样的
    document.getElementById("target").onclick();
    document.getElementById("target").click();

}


小程序中,不知道怎么触发?

5 回复

你好,这中间理解可能有误。你所写的是在bindTap函数中怎么区分组件,我想问的是怎么使用程序触发bindTap函数。

当然,这并不是直接调用bindTap方法就行,因为对于tap事件可以这样简单处理,但是对于change事件的组件,就有问题了。因为这类方法被调用时,参数里包含change的具体信息,例如本次change的x,y位置。我直接调用这个函数,没法给这些参数。


我其实想要的就是利用程序,让目标组件真正运行,类似模拟了一次点击触发。document.getElementById("picker-time").onclick();,的确是我想要的方法,真正触动组件工作。但是上面这个方法小程序不支持。


Android app里有类似接口performClick(),也是这个意思。


不知道小程序的类似接口或方法是什么?



用我上面的方法

if(id == ‘a1’) {}

else if (id == ‘a2’) {}

else if (id == ‘a3’) {}

@犇niú茻máng

你好,非常感谢你的回复,非常清楚,赞!

现在的问题是,获取这个组件的id没有问题,但是使用什么接口通过这个id触发组件事件呢?之前列的方法:

document.getElementById("target").onclick();

微信小程序不支持,使用报错

微信小程序页面的脚本逻辑是在JsCore中运行,JsCore是一个没有窗口对象的环境

所以不能使用bom相关的对象。而依赖bom的常用的比如说jQuery就无能为力了。wa正式部署使用webpack打的包,而在打包的过程中,把以下变量给屏蔽了:

window,document,frames,self,location,navigator,localStorage,history,Caches,screen,alert,confirm,prompt,XMLHttpRequest,WebSocket

<view bindtap=‘bindTap’>

<view id=“a1” style=“width:100%;height:150rpx;background-color:#fcc;”></view>

<view id=“a2” style=“width:100%;height:150rpx;background-color:#faf;”></view>

<view id=“a3” style=“width:100%;height:150rpx;background-color:#ccf;”></view>

</view>

这样做看看

回到顶部