Chrome 设备仿真器中的 Ext js Numberfield 允许类型 "e"(指数)

Ext js Numberfield in Chrome device Emulator allow type "e" (exponential)

我在使用 Ext JS 数字字段时遇到问题。 当我在 google chrome 模拟器中使用设备时,允许在数字字段组件中键入字母“e”。

重现该行为的步骤:

  1. 在此fiddle中输入:https://fiddle.sencha.com/#view/editor&fiddle/36eh
  2. 按 F12 打开检查模式。
  3. 单击“设备”图标以更改为设备模式。
  4. 再次单击 运行 fiddle。
  5. 在数字字段组件中键入字母“e”。
  6. 验证是否可以在设备模式下通知字母“e”。

你们见过这个问题吗?

谢谢, 雷纳托·卡瓦略。

您可以使用以下肮脏的技巧:

Ext.create('Ext.form.Panel', {
    renderTo: document.body,
    items: [{
        xtype: 'numberfield',
        label: 'Decimal number',
        decimals: 2,
        decimalSeparator: ',',
        labelAlign: 'top',
        name: 'age',
        //inputType: 'number', // Instead of "click on the Device icon"
        // Our dirty hack/workaround 
        listeners: {
            keydown: function(cmp, e) {
                if(e.key() === 'e') {
                    e.stopEvent()
                }
            }
        }
    }]
});

或者您可以使用 inputType: 'text' 并过滤输入,但这是更肮脏的方式..无论如何,如果您找不到更优雅的东西,您可以使用这个肮脏的 hack。

另一个解决方案:

<input type="number" onkeydown="javascript: return event.keyCode === 8 || event.keyCode === 46 ? true : !isNaN(Number(event.key))">