sencha touch textfield clear 事件

Posted

技术标签:

【中文标题】sencha touch textfield clear 事件【英文标题】:sencha touch textfield clear event 【发布时间】:2011-09-08 04:05:40 【问题描述】:

我正在尝试在 sencha touch 的文本字段中实现列表过滤器。例如,我有一堆联系人,当我在字段中输入时,它可能会按名称过滤。当我单击圆形 X 按钮清除文本字段时,我想重置过滤器以不过滤任何联系人。

问题是,我似乎无法找到检测清除按钮点击的方法。似乎没有任何类型的事件,而且我似乎无法破解解决方法。

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

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

【问题讨论】:

【参考方案1】:

您可以在文本字段内的 clearIconContainerEl 上监听点击事件或覆盖 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!');
                
            
        );
    
);

【讨论】:

我覆盖了 onClearIconTap 以触发清除事件。如果 useClearIcon 设置为 true,则点击 onClearIconTap,然后我可以捕获 clear 事件。如果没有 onClearIconTap,这将永远无法工作。我很高兴被证明是错误的......感谢您的回答! 这也是一个很好的解决方案。是的,只有当 useClearIcon 为真时才有可能。 :) 它们都有效,onClearIconTap 覆盖方法和 clearIconContainerEl 点击事件。实际上它们或多或少是相同的,因为 clearIconContainerEl 点击事件触发了 onClearIconTap 方法,所以它更多的是架构决策而不是功能。这是运行的代码,你自己看看:lab.herkulano.com/sencha-touch/search-cleartap【参考方案2】:

对于 sencha touch 2.0 用户:

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

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

【讨论】:

【参考方案3】:

问题是sencha touch没有添加小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, ...

现在,在我的搜索字段实现中,我可以创建一个名为 onSearch 的函数,该函数将在调用“搜索”事件时调用。请注意,“搜索”事件不仅针对 X 调用,还针对某些诸如回车键之类的东西调用。底线是 sencha touch 1.1 根本不检查此事件,这是 X 触发事件的唯一一次,因此唯一的解决方案是修改 sencha-touch.js。

【讨论】:

请注意,没有必要实际更改 sencha-touch.js 文件中的某些内容。因为这使得更新到较新版本的 Sencha 库变得非常困难。最好覆盖您自己文件中的功能。由于都是 javascript,这样做没有问题。

以上是关于sencha touch textfield clear 事件的主要内容,如果未能解决你的问题,请参考以下文章

使用 sencha touch 2 表单在 textfiend 中启用掩码?

禁用 Go 按钮提交表单(Sencha Touch 2、Cordova、Android)

Sencha Touch 2 文本框在 iOS 7 中的焦点问题

_Class.scss:Sencha Touch 主题中未定义的变量“$font-family”

如何使用 sencha-touch.jsb3 构建 Sencha Touch?

Sencha Touch实战OA系统开发|Sencha Touch项目教程