收藏
回答

不知道这算不算bug, 关于input的bindinput

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug input 客户端 6.6.7 WebChatLib 2.2.3(2018.8.18 17:56:19)

我在wxml的input中指定了bindinput属性为'onEdit_typing ',但此时js文件中并没有声明该函数。 

原因是我希望在该input需要被show出来时才‘动态’指定。


比如

//.wxml

<view wx:if="{{edit_visible}}">

    <input value='{{text}}' bindinput='onEdit_typing' type='text' />

</view>


//.js

showEdit:function(){

    this.data.edit_visible = true;

    this.onEdit_typing  = function(e){

     console.log('真正的回调');

    }

    this.setData(this.data);

    console.log(this);

}


我通过调用该方法来让input显示出来,但当我输入时会提示找不到该handler,即提示'onEdit_typing'找不到

但我log this时, 即把page打印出来时却可以看到该方法有被声明了。


我在其它地方用类似的机制都是可以正常运作的,包括针对view的bindtap动态实现,但在input这里却失败了。 我不确定这是不是bug, 如果是,腾讯可否提供一个纪念品给我?


so,我现在的解决办法是老老实实在js中先声明一下该方法(很不情愿这样!!!)

onEdit_typing:function(e){

 console.log('占位');

}

就不会有这个提示了,而且仍然会走到我自己‘动态’定义的方法里

测试环境 1模拟器(mac)2真机(android,三星) 均如此

请开发组明查。 谢谢




------------------------------------------

补充

https://github.com/simsir-lin/dialog-wxapp我使用了该dialog组件


<!-- 文本输入 -->

<dialog data-model="edit_visible" visible="{{edit_visible}}" title="{{edit.title}}" bindclose="onEdit_close" bindconfirm="onEdit_confirm" bindopen='onEdit_open'>

    <view class='container-v padding_mid-v bg_white'>

        <input value='{{edit.text}}' bindinput='onEdit_typing' type='text' class='text-big text-color ' />

        <view style='height:1px;background:#a5a5a5;margin-top:1vw ' />

    </view>

</dialog>

<!-- 文本输入 -->


//该方法用于调起dialog/input 以接受用户输入

const editText = function(page, text, title, callback) {

    if (text == undefined) {

        text = '';

    }

    var that = page;

    var free = function() {

        delete that.onEdit_done;

        delete that.onEdit_close;

        delete that.onEdit_open;

        delete that.onEdit_typing;

        delete that.data.edit;

        delete that.data.edit_visible;

    };

    

    that.onEdit_typing = function(e) {

        that.data.edit.text = e.detail.value;

    };

    that.onEdit_close = function(e) {

        free();

    };

    that.onEdit_open = function(e) {

    

    };

    that.onEdit_confirm = function(e) {

        callback(that.data.edit.text);

        free();

    };

    

    that.setData({

        edit_visible: true,

        edit: {

            text: text,

            title: title

        }

    });

}

    





最后一次编辑于  2018-08-21
回答关注问题邀请回答
收藏

4 个回答

  • 小程序技术专员-june
    小程序技术专员-june
    2018-08-21

    自定义组件这里对于动态添加的方法在某些特别的事件触发中有个bug,去原型寻找却没有在当前实例寻找,所以你这里挂在实例上的方法会找不到。预计近期的基础库版本会修复这个问题。

    2018-08-21
    有用
    回复 1
    • hibor-za
      hibor-za
      2018-08-22

      辛苦了,这么晚还在查bug

      2018-08-22
      1
      回复
  • 晨
    2018-08-21

    麻烦给个相关的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html),我们定位下问题

    2018-08-21
    有用
    回复 1
  • 卢霄霄
    卢霄霄
    2018-08-21

    正常的呢


    2018-08-21
    有用
    回复 8
    • hibor-za
      hibor-za
      2018-08-21

      我是在’组件‘ 里面使用这段代码, 会有影响吗?

      2018-08-21
      回复
    • 卢霄霄
      卢霄霄
      2018-08-21回复hibor-za

      不知道。。我试试哈,稍等。。

      2018-08-21
      回复
    • hibor-za
      hibor-za
      2018-08-21回复卢霄霄

      感谢回复,可以看看我刚才贴的代码。 我用一个第三方dialog组件。

      2018-08-21
      回复
    • 卢霄霄
      卢霄霄
      2018-08-21回复hibor-za

      嗯,在组件里这么用,会有问题。他的this和page指向不一样,不能弄到 methods里去

      2018-08-21
      回复
    • hibor-za
      hibor-za
      2018-08-21回复卢霄霄

      我也是如此怀疑,但奇怪的是我在同样的组件里用类似的方式处理view的bindtap方法,可以!

      2018-08-21
      回复
    查看更多(3)
  • hibor-za
    hibor-za
    2018-08-21




    2018-08-21
    有用
    回复
登录 后发表内容