不知道这算不算bug, 关于input的bindinput
发布于 5 年前 作者 qiangang 5506 次浏览 来自 问答

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

        }

    });

}

 

4 回复

正常的呢

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

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

回到顶部