收藏
回答

微信小程序,怎么在js里触发组件?

问题模块
API和组件

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


一般js里可以这样触发

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

}


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


邀请回答
复制链接收藏投诉关注问题回答

5 个回答

  • 不阳光不帅气°
    不阳光不帅气°
    2017-09-18

    <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>

    这样做看看

    2017-09-18
    赞同
    回复
  • 郭岗
    郭岗
    2017-09-19

    @犇niú茻máng

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

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

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

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

    2017-09-19
    赞同
    回复
  • 不阳光不帅气°
    不阳光不帅气°
    2017-09-19

    用我上面的方法

    if(id == 'a1') {}

    else if (id == 'a2') {}

    else if (id == 'a3') {}

    2017-09-19
    赞同
    回复
  • 郭岗
    郭岗
    2017-09-19

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


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


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


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


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




    2017-09-19
    赞同
    回复
  • 不阳光不帅气°
    不阳光不帅气°
    2017-09-26


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

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

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


    2017-09-26
    赞同
    回复