wgj830823 2009-07-09 10:25
浏览 254
已采纳

Ext formpanel 二次显示出错

最近在做一个用户管理的小模块 用的ext的formpanel在前台展示,
很简单 一个注册一个登陆按钮,然后弹出各自的Ext.Window,其中自然包含formpanel,现在的问题是
用户登录之后我把登陆按钮给隐藏了,然后用户点注销再显示登录按钮,可是再次点登陆按钮的时候弹出windows,然后我再次输入用户名密码,可是程序中总也去不到用户名和密码了,我都是用的id取的,不知道这里有什么问题,希望大家给看一下!
下面是我的代码

[code="JavaScript"]

Ext.onReady(function(){
var i=0;
var loninUser = Ext.get('userLoginBtn');
var win,baseInfoPanel;

loninUser.on('click', function(){

    baseInfoPanel = new Ext.FormPanel({
        labelWidth: 40, // label settings here cascade unless overridden
        frame:true,
        autoWidth: true,
        height: 300,
        title: '用户登录',
        labelAlign : 'right',
        defaults: {width: 200},
        defaultType: 'textfield',
        bodyStyle:'padding:15px 15px 0',
        items: [
                new Ext.form.TextField({
                fieldLabel: '用户名',
                id:   'userlogin_username',
                allowBlank:false,
                blankText:'用户名不能为空',
                vtype:'alphanum',
                vtypeText:'用户名中只能包含英文字母,数字和_',
                msgTarget:'under'


            }),{
                fieldLabel: '密码',
                id:  'userlogin_password',
                inputType: 'password',
                blankText:'请填写密码',
                msgTarget:'under',
                allowBlank: false
            }]

    });

    var tabs = new Ext.TabPanel({
        deferredRender: false,
        anchor:'0,0',
        region: 'center',
        margins:'3 3 3 0', 

        activeTab: 0,
        items: [baseInfoPanel],
        layoutOnTabChange : true,
        listeners:{
            tabchange : function(){
                tabs.doLayout(false);
            }
        }
    });

//

    if(!win){
        win = new Ext.Window({
            el:'userLoginDiv',
            layout:'fit',
            width:400,
            height:300,
            modal:true,
            closeAction:'hide',
            closable:false,
            plain: true,

            items:baseInfoPanel,

            buttons: [{
                text:'确定',
                disabled:false,
                handler: function(){


                    if(baseInfoPanel.form.isValid()){

                    var privBits = '';
                    var end = 0;
                                            var userparams ={                       
                        userName:baseInfoPanel.findById( 'userlogin_username').getValue(),
                        password:baseInfoPanel.findById( 'userlogin_password').getValue()

                    };


                    Ext.Ajax.request({
                        url:'servlet/userajax?class=cn.com.infcn.usp.ajax.user.UserAction&verb=login',
                        method: 'POST',

                        params:userparams,
                        callback:function(options,success,response){

                            var results = Ext.decode(response.responseText);
                            if(results.success == false){
                                alert(results.message);
                            }else {
                                alert('恭喜'+results.result+',登录成功');
                                win.hide();
                                //设置登录和注册按钮不可用
                                document.getElementById('userLoginBtn').style.display='none';
                                document.getElementById('registerNewUserBtn').style.display='none';
                                document.getElementById('showUserNamePla').style.display='';
                                var loginUserName = document.getElementById('loginUserName').innerText=results.result;


                            }

                        },
                        failure: function(errMsg){
                            alert(errMsg);
                        }
                        });          


                }else{
                    Ext.Msg.alert('验证未通过','输入数据不合法,请检查输入的数据');
                }


            }
            },{

                text: '取消',
                handler: function(){
                    baseInfoPanel.form.reset();
                    win.hide();
                    //button.dom.title('注册');
                }

                }]
        });
   }
    win.show(this);
});

});

[/code]

[b]问题补充:[/b]
刚才我 items: baseInfoPanel, 换成items:tabs,运行还是有同样的错误就是第二次提交的时候,在
userName:baseInfoPanel.findById( 'userlogin_username').getValue(),

password:baseInfoPanel.findById( 'userlogin_password').getValue()

这里baseInfoPanel.findById( 'userlogin_username')会报undefined错误 不理解
[b]问题补充:[/b]
var win, baseInfoPanel这个我放到formpanel中的时候貌似可以再次提交了 不过出了新问题,就是第二次点登陆的时候会弹出两个window重叠,这样逐次增加 又是为什么呢
[b]问题补充:[/b]
我把那个closeAction:'close'改了以后如果后面按钮事件中的hide不改则问题还存在如果也都改为close();就会报一个错 : this.el.dom为空或者不是对象

[b]问题补充:[/b]
问题基本上应该是在这里,第二次取得时候通过id去不到那两个对象,是这样吧。我不理解的是既然运行到这里了那么baseInfoPanel应该是新创建的 同时那两个元素也就是新的啊,怎么可能去不到呢?麻烦了 userName:baseInfoPanel.findById( 'userlogin_username').getValue(),
password:baseInfoPanel.findById( 'userlogin_password').getValue()
[b]问题补充:[/b]
对了 我是照着ext的例子做的。在我的jsp中还加了这个

登陆
                </div>

是不是在windows。destroy的时候这两个div也没了 ,然后再次点登陆的时候找不到这两个div啊,有没有这个可能

  • 写回答

5条回答 默认 最新

  • zhoujuan520 2009-07-09 11:58
    关注

    yes

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题