【问题标题】:In Extjs 3.x input type file text field reset is not working in IE8(Extjs)EXTJS*3.2在 Extjs 3.x 输入类型文件文本字段重置在 IE8(Extjs)EXTJS*3.2 中不起作用
【发布时间】:2012-09-24 13:25:54
【问题描述】:

extjs× 6627,3.x 版本,在 mozilla 浏览器中重置适用于 inputType :'file',但不适用于 IE8 浏览器,这是我的代码,

xtype :'textfield',
name:'Policy_fileUpload',
id :title+'_uploadFile',
inputType :'file',
fieldLabel :'Upload File and Location<font color=red>*</font>',
blankText :'Please choose a file',
anchor :'100%',
required :true,
autoShow :true

现在正在使用 reset 属性重置此字段

xtype:'button',extjs× 6627
id:title+'cancelButton',
width:100,
text:'Cancel',
listeners : {
   'click':function(){
       Ext.getCmp(title+'_uploadFile').reset();
       } 

帮我解决这个问题提前谢谢。

【问题讨论】:

    标签: extjs3


    【解决方案1】:

    这似乎是 IE8 中的一个安全“功能”。以下是使用 jQuery 给出解决此问题的相关主题:

    Empty input type file doesn't work in IE

    Clearing <input type='file' /> using jQuery

    他们都在重新创建输入字段的行中提出了一些建议。要在 ExtJS 3.x 中做到这一点,你可以尝试这样的事情:

    listeners : {
        'click':function(){
            var uploadField = Ext.getCmp('_uploadFile');                
            if (Ext.isIE8) {                
                var cfg = uploadField.initialConfig;
                uploadField.destroy();
                var parentCt = Ext.getCmp('parentContainer');
                parentCt.insert(0, cfg);
                parentCt.doLayout();
            } else {
                uploadField.reset();
            }
    
        } 
    }
    

    此外,似乎 IE9 的行为方式相同。所以你可能想要if (Ext.isIE) 而不是if (Ext.isIE8)

    【讨论】:

    • 谢谢它对我真的很有帮助,但是在这里你提到的是 Ext.getCmp('parentContainer');,为什么问这意味着在运行脚本时它会抛出未定义的错误,所以我无法设置 var parentCt 的值。
    • 'parentContainer' 是放置了 uploadField 的容器的 id。看看这里:jsfiddle.net/UAAH3。实际上,在更大的应用程序中,通过 id 属性引用组件是个坏主意。我在这里使用它,因为我认为我的意思很明显。
    • 非常感谢 medvarztis 在执行以下代码时正在使用一个警报来查找它在 parentContainer 中的内容,但它显示为未定义,我已附加下面的代码...提前感谢 if (Ext .isIE) { var cfg = uploadField.initialConfig; uploadField.setRawValue(' '); alert('cfg value'+ Ext.get('parentContainer')); if(Ext.get('parentContainer') == null){ Ext.getCmp(title+'_uploadFile').setVisible(true); } var parentCt = Ext.is('parentContainer'); parentCt.insert(0, cfg); parentCt.doLayout(); } else { uploadField.reset(); }
    • 好的,很抱歉造成混淆。 'parentCointainer' 是父组件的 ID。您实际上需要用您自己的 ID 替换它。如果您有一个 ID 为“myPanel”的面板(或任何其他组件),其中您的上传字段的 ID 为“title+'_uploadField'”,那么您需要将“parentContainer”替换为“myPanel”(即您的 id该组件)。
    • 非常非常感谢 medvarztis,它对我来说工作正常,真的很有帮助....再次感谢 :-)
    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    相关资源
    最近更新 更多