【问题标题】:How to display values in uppercase in ExtJs textfield without showing user letter transition from lower to uppercase?如何在 ExtJs 文本字段中以大写形式显示值而不显示从小写到大写的用户字母转换?
【发布时间】:2011-11-07 10:14:08
【问题描述】:

我们正在使用 ExtJS 4 创建一个应用程序,该应用程序要求表单文本字段中的条目应始终为大写。

为此,我发现我可以在更改事件上调用一个函数并将当前值转换为大写并通过以下方式将其设置回字段:

change: function(field, newValue){
   field.setValue(newValue.toUpperCase());
} 

它的作用是,如果用户输入小写字母,则它会将其转换为大写字母并将其放回字段中。在此期间,会向用户显示从小写到大写的轻微转换。也就是说,用户可以看到小写字母,可能在一毫秒后,字母变成大写。

问题是:有没有办法避免这种从小写到大写的“转换/转换”,并在用户键入内容时直接向用户显示大写字母?

我尝试使用 - style=text-transform:uppercase - 但没有成功。

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

    标签: extjs transform textfield uppercase lowercase


    【解决方案1】:

    我尝试使用 - style=text-transform:uppercase - 但没有运气。

    您应该改用fieldStyleHere is demo.
    干杯!

    【讨论】:

    • 同意 :) 也想通了。不过谢谢你的回答。
    【解决方案2】:

    给定的答案仅适用于以大写形式显示文本,但值保持不变。我已经扩展了文本字段以覆盖 getValue() 方法以返回大写的值,不仅用于显示,还带有一个可选的配置标志:

    Ext.define('Dev.ux.UpperTextField', {
        extend: 'Ext.form.field.Text',
        alias: 'widget.uppertextfield',
    
        //configuration
        config: {
            uppercaseValue: true //defaults to true
        },
    
        constructor: function (config) {
            this.initConfig(config);
            this.callParent([config]);
        },
    
        initComponent: function () {
            var me = this;
            Ext.apply(me, {
                fieldStyle: 'text-transform:uppercase',
            });
    
            me.callParent();
        },
    
        //overriden function
        getValue: function () {
            var val = this.callParent();
            return this.getUppercaseValue() ? val.toUpperCase() : val;
        }
    });
    

    然后我可以轻松地将几个文本字段添加到表单中:

    {
         xtype: 'uppertextfield',
         uppercaseValue: false, //custom cfg available (default is true)
         name: 'Descricao',
         fieldLabel: 'Nome da Cidade',
         allowBlank: false,
         enforceMaxLength: true,
         maxLength: 80
    },
    

    在 EXT 4.2.1 中工作。

    【讨论】:

      【解决方案3】:

      你也可以用插件来做到这一点。

      {
          xtype: 'textfield',
          plugins: ['uppertextfield']
      }
      

      在 ExtJS 4.2.1 中使用它作为插件

      Ext.define('App.plugin.UpperTextField', {
          extend: 'Ext.AbstractPlugin',
          alias: 'plugin.uppertextfield',
      
          init: function (cmp) {
              Ext.apply(cmp, {
                  fieldStyle: (cmp.fieldStyle ? cmp.fieldStyle + ';' : '') + 'text-transform:uppercase',
                  getValue: function() {
                      var val = cmp.__proto__.getValue.apply(cmp, arguments);
                      return val && val.toUpperCase ? val.toUpperCase() : val;
                  }
              });
          }
      });
      

      灵感来自:https://www.sencha.com/forum/showthread.php?94599-Uppercase-TextField-plugin&p=522068&viewfull=1#post522068

      PS:我必须在原型上调用 getValue。如果我在 cmp 上调用 getValue ,它将递归地继续执行此操作并且永远不会退出。我愿意接受有关如何通过插件更改组件的 getValue 方法的建议。

      【讨论】:

        【解决方案4】:

        它适用于 ExtJS 4.2

        如果您只想为文本字段输入大写字母,则扩展基本文本字段以将字段样式更改为大写,并附加一个侦听器以将任何文本更改为大写时的原始值更新。

        //定义一个新的自定义文本字段

        Ext.define('IN.view.item.UpperCaseTextField', {
            extend: 'Ext.form.field.Text',
            alias : 'widget.myUpperCaseTextField',
            fieldStyle: {
                textTransform: "uppercase"
            },
            initComponent: function() {
                this.callParent(arguments);
            },
            listeners: {
                change: function (obj, newValue) {
                    console.log(newValue);
                    obj.setRawValue(newValue.toUpperCase());
                }
             }
        });  
        

        //使用别名在视图定义中使用新创建的自定义文本字段

        xtype: 'form',
         items: [
          {
           xtype: 'myUpperCaseTextField',
           itemId: 'itemNumber',
           name : 'item',
           allowBlank: false,
           msgTarget: 'side',
           fieldLabel: 'Item Number',
           size: 11,
           maxLength: 10
          },
        
        
         ]
        

        【讨论】:

        • 尝试在这样的字段中输入一些文本,然后将插入符号设置为输入的开头并尝试在那里添加一些文本,你会感到惊讶。
        猜你喜欢
        • 2013-02-04
        • 1970-01-01
        • 2010-11-06
        • 2015-08-07
        • 2018-03-29
        • 2022-11-27
        • 2015-07-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多