Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么ExtJS组件本身不能调用markInvalid()?_Javascript_Extjs - Fatal编程技术网

Javascript 为什么ExtJS组件本身不能调用markInvalid()?

Javascript 为什么ExtJS组件本身不能调用markInvalid()?,javascript,extjs,Javascript,Extjs,我有一个3.0.0 ExtJS web应用程序,其中我需要一个Ext.form.NumberField。有一个侦听器需要能够将NumberField本身标记为无效 问题是,当我试图从侦听器函数中调用markInvalid函数时,这不起作用。当我从其他任何地方调用它时,它工作得很好——但不是从数字字段本身的侦听器内部调用 这是代码 var myNumberField = new Ext.form.NumberField({ id: "myNumberField", listen

我有一个3.0.0 ExtJS web应用程序,其中我需要一个Ext.form.NumberField。有一个侦听器需要能够将NumberField本身标记为无效

问题是,当我试图从侦听器函数中调用markInvalid函数时,这不起作用。当我从其他任何地方调用它时,它工作得很好——但不是从数字字段本身的侦听器内部调用

这是代码

var myNumberField = new Ext.form.NumberField({

    id: "myNumberField",

    listeners : {
        'render': function(c) {


            c.getEl().on('keyup', function() {

                this.markInvalid("Marking this invalid!!");
            }, c);

         }
    },
});
这很奇怪-如果我在任何其他地方设置组件,markInvalid就可以正常工作。我甚至可以从另一个组件的监听器中设置好它-我只是不能在组件本身中设置它。它会闪烁一瞬间,然后返回

求你了,我真的是束手无策了。任何帮助都将不胜感激

提前感谢,,
Tim

这是因为keyup是默认设置,所以发生的情况是字段被标记为无效,然后其他验证被处理,无效标记被清除。您可以看到标记立即出现和消失,不是吗

一种解决方案是在按键时禁用自动验证。字段仍将显示,您可能也要禁用该选项:

var myNumberField = new Ext.form.NumberField({
    id: "myNumberField",

    validationEvent: false, // disable keyup validation

    listeners : {
        'render': function(c) {
            c.getEl().on('keyup', function(e) {
                // the mark will stay!
                this.markInvalid("Marking this invalid!!");
            }, c);
        }
    }
});
但是,禁用内置验证(例如allowBlank、minValue等)可能并不可取。在这种情况下,您可以在自己不将字段标记为无效时恢复正常的验证过程。下面是一个如何做到这一点的示例:

var myNumberField = new Ext.form.NumberField({
    renderTo: Ext.getBody(),

    id: "myNumberField",

    validationEvent: false, // disable normal keyup validation

    allowBlank: false, // example built-in validator

    listeners : {
        'render': function(c) {
            c.getEl().on('keyup', function(e) {
                // if 'v' is pressed, then validate (the field will be marked
                // as invalid if blank, else invalid will be clear)
                if (e.getKey() === e.V) {
                    this.validate();
                } 
                // if it's another key, we'll mark the field as invalid 
                // and stop
                else {
                    this.markInvalid("Marking this invalid!!");
                }
            }, c);
        }
    }
});

谢谢-最好的解释。你真棒!