【问题标题】:ComboBox fires change event on every keypressComboBox 在每次按键时触发更改事件
【发布时间】:2013-08-02 14:17:13
【问题描述】:

我正在尝试使用工具栏中的组合框构建网格,在网格中我将有一些关于员工的信息,并且组合将允许我选择我想要加载这些信息的员工。

我很容易创建网格,但是工具栏中的组合框有问题:每次我输入内容时它都会触发更改事件。

Ext.define('My.Grid.Combo', {
    extend: 'Ext.form.ComboBox',
    fieldLabel: 'Choose State',
    store: states,
    alias: 'widget.combostates',
    queryMode: 'local',
    displayField: 'name',
    valueField: 'abbr',
    forceSelection: true,
    listeners: {
        change: function (field, newValue, oldValue) {
            console.log(newValue);
        },
        scope: this
    }
});

这是我的演示:http://jsfiddle.net/Misiu/LTVXF/

将光标放在该组合内并开始输入。每次按键后都会触发该事件(参见控制台)

我希望在用户从该复选框中选择有效元素后触发该事件(或其他无关紧要的事件)(我正在使用 forceSelection)。
我可以添加editable: false,,但我希望在输入部分有效值后进行本地过滤。

【问题讨论】:

  • 不能使用select事件吗?

标签: extjs extjs4.2


【解决方案1】:

发生这种情况的原因是因为它实际上在您每次按下键时都会更改值。您要使用的是select 侦听器。使用它,您可以从选择的记录中获取值。

listeners: {
    select: function(combo, records, eOpts) {
        console.log(records[0].get('name'));
        console.log(records[0].get('abbr'));
    }
}

【讨论】:

  • 我刚刚在 ExtJS 文档中发现了该事件。感谢您这么快的回答:)
【解决方案2】:

尝试删除“范围:this”。删除它后,当您在事件中调用它时,您将能够看到触发事件的组合框。否则就是window的值。

【讨论】:

    猜你喜欢
    • 2018-07-13
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多