这是自定义组件的bug吗
发布于 6 年前 作者 pliang 1322 次浏览 来自 问答

我想创建一个列表,用于展示一些数据。

每一个列表项的内容有(标题,时间,描述)。其中时间可被修改。

基于这样的需求,我想自定义一个组件。

<record_card></record_card>

它内部实现了我需要的标签:

<record_card>
   <view>titleview>
   <view>tipview>
   <view>timeview>
record_card>

那么我在index页面中,就可以这样使用:

 

<block wx:for="{{infos}}" wx:for-item="info">
       <record_card info='{{info}}'>record_card>
   block>

其中infos是数据。效果如下:

因为时间可以修改,所以record_card增加了修改功能

<record_card>
   <view style="display:block;默认是可见的">
       <view>titleview>
       <view>tipview>
       <view bind:tap='showTimePicker'>timeview>
   view>
   <view style="display:none;默认是隐藏的">
       时间选择控件
       <button bind:tap='FunCancel'>取消button>
       <button bind:tap='FunOK'>确认button>
   view>
record_card>

效果如下:

现在问题在于:当修改时间界面出来后,确定按钮的tap事件会劫持整个页面,无论点哪里,都会执行FunOK,而时间选择控件点不了。

如果将:

<button bind:tap='FunCancel'>取消button>
<button bind:tap='FunOK'>确认button>
顺序改为
<button bind:tap='FunOK'>确认button>
<button bind:tap='FunCancel'>取消button>

那么取消按钮的tap事件FunCancel就会劫持整个页面的tap。

想请问下,这是怎么回事?

具体现象可以运行我提交的代码片段看看。

1 回复

最后发现,在确认按钮的CSS中,有一条:

btn-choose{
 
    ...
 
    position:static;
 
}

将position去掉即可。但外观会有一点小影响。

为何加上static之后,按钮会劫持整个界面的tap事件,这可能是小程序和标准HTML的差异。因为static本就是position的默认选项。但小程序中,static显然不是。

回到顶部