Sencha touch sencha触摸文本字段清除事件

Sencha touch sencha触摸文本字段清除事件,sencha-touch,Sencha Touch,我试图在SenchaTouch的文本字段中实现一个列表过滤器。例如,我有一堆联系人,当我在字段中键入时,它可能会按名称过滤。当我点击圆形X按钮清除文本字段时,我想重置过滤器以过滤所有联系人 问题是,我似乎想不出一种方法来检测点击清除按钮。似乎没有任何类型的事件,而且我似乎无法解决问题 如果有人知道如何在sencha touch中检测文本字段清除,我将不胜感激 我已经在safari和xcode模拟器中进行了尝试,并且正在使用sencha touch 1.1.0。我错过什么了吗?当它实际上是一个移动

我试图在SenchaTouch的文本字段中实现一个列表过滤器。例如,我有一堆联系人,当我在字段中键入时,它可能会按名称过滤。当我点击圆形X按钮清除文本字段时,我想重置过滤器以过滤所有联系人

问题是,我似乎想不出一种方法来检测点击清除按钮。似乎没有任何类型的事件,而且我似乎无法解决问题

如果有人知道如何在sencha touch中检测文本字段清除,我将不胜感激


我已经在safari和xcode模拟器中进行了尝试,并且正在使用sencha touch 1.1.0。我错过什么了吗?当它实际上是一个移动应用程序时,这不是一个问题吗?

您可以在文本字段内的ClearIConContainer上侦听点击事件,或者覆盖onClearIconTap方法

Ext.setup({
    icon: 'icon.png',
    tabletStartupScreen: 'tablet_startup.png',
    phoneStartupScreen: 'phone_startup.png',
    glossOnIcon: false,
    onReady: function() {

        var searchField = new Ext.form.Search({
            name : 'search',
            placeHolder: 'Search',
            useClearIcon: true,

            onClearIconTap: function() {
                if (!this.disabled) {
                    this.setValue('');
                    console.log('onClearTap: Clear button tapped!');                       
                }
            }
        });

        var viewport = new Ext.Panel({
            fullscreen: true,
            dockedItems: [{
                xtype: 'toolbar',
                dock: 'top',
                items: [searchField]
            }]
        });

        console.log(searchField.useClearIcon);

        searchField.mon(searchField.clearIconContainerEl, {
            scope: searchField,
            tap: function() {
                if (!this.disabled) {
                    console.log('clearIconContainerEl: Clear button tapped!');
                }
            }
        });
    }
});

对于sencha touch 2.0用户:

如果您使用的是新的mvc结构,那么您可以在控制器初始化中使用它

this.control({    
     '#yourTextFieldId clearicon': {
          tap: function(){console.log('ClearICON tapped');}
     }
....
)};

问题是SenchaTouch没有添加小X。这是html5“搜索”输入的一个功能。要捕获此事件,您需要查找搜索事件。我是如何解决这个问题的,我编辑了sencha-touch.js

我修改了-

    if (this.fieldEl) {
        this.mon(this.fieldEl, {
            focus: this.onFocus,
            blur: this.onBlur,
            keyup: this.onKeyUp,
            paste: this.updateClearIconVisibility,
            mousedown: this.onBeforeFocus,
            scope: this
        });
将来-

    if (this.fieldEl) {
        this.mon(this.fieldEl, {
            focus: this.onFocus,
            blur: this.onBlur,
            keyup: this.onKeyUp,
            paste: this.updateClearIconVisibility,
            mousedown: this.onBeforeFocus,
            search: this.onSearch,
            scope: this
        });
Ext.form.Text=Ext.extend(Ext.form.Field,{


现在,在searchfield的实现中,我可以创建一个名为onSearch的函数,当调用“search”事件时将调用该函数事件不仅是为X调用的,而且是为诸如enter键之类的某些东西调用的。底线是sencha touch 1.1根本不检查此事件,这是X唯一触发事件的时间,因此唯一的解决方案是修改sencha touch.js。

我重写onClearIconTap以触发清除事件。如果useClearIcon设置为true,onClearIconTap为hit、 然后我可以捕捉到清晰的事件。如果没有onClearIconTap,这将永远不会起作用。我很高兴被证明是错误的…谢谢你的回答!这也是一个很好的解决方案。是的,只有useClearIcon是真的,这才有可能。:)onClearIconTap覆盖方法和ClearIContainerel tap事件都可以工作。实际上,它们或多或少是相同的,因为ClearIContainerel tap事件触发onClearIconTap方法,因此与其说它是功能性的,不如说它是一个架构决定。下面是运行的代码,请您自己看:注意,实际上不需要这样做更改sencha-touch.js文件中的某些内容。因为这使得更新到新版本的sencha库非常困难。最好覆盖您自己文件中的功能。因为它都是JavaScript,所以这样做没有问题。