lyon_fanfan 2009-07-29 22:34
浏览 247
已采纳

右键菜单 结合 树节点编辑的问题

代码如下:
//菜单 修改昵称
var QQForm_MenuChangeNike = new Ext.menu.Item({
id:'QQForm_MenuChangeNike'
,name:'QQForm_MenuChangeNike'
,text:'修改昵称'
,checked:true
,listeners:{
'click' : function(th,e)
{
//编辑Edit
var QQForm_MenuChangeNike_TreeEditor = new Ext.tree.TreeEditor(
Ext.getCmp('QQForm_QQFriendTree')
,{
allowBlank : false
,id:'QQForm_MenuChangeNike_TreeEditor'
,cancelOnEsc : true
,listeners : {
'complete ':function(th,newName,oldName){
alert('dddd');
ModifyQQFriendName(th,node.id,NewName,node.parentNodeId);//修改名称
}
}
})
QQForm_MenuChangeNike_TreeEditor.editNode = node;
QQForm_MenuChangeNike_TreeEditor.startEdit(node.ui.textNode);
}
}
})
/*
*修改名称
*/
function ModifyQQFriendName(th,QQFriendID,NewName,ParentID)
{
alert("ssss");
var conn = new Ext.data.Connection();
conn.request({
url:'json/QQ/QQUser.aspx'
,method:'POST'
,params:{FunctionName:'ModifyQQFriend',QQFriendID:QQFriendID,UserID:'-99',UserFriendID:'-99',FriendNike:NewName,IsLeaf:'-99',ParentID:ParentID}
,success : function(responseObject){
var json = Ext.util.JSON.decode(responseObject.responseText);
if (json.success)
{
//成功提交 暂时不处理
}
else
{
Ext.Msg.alert('提示','提交数据发生错误,消息没有成功发送!');
th.cancelEdit(true);
}
}
,failure : function(responseObject){
Ext.Msg.alert('提示','提交数据发生错误,消息没有成功发送!');
th.cancelEdit(true);
}
});
th.setDisabled(true);
}

问题如下:
1。当我编辑完毕后 点击回车 却发现没有执行'complete'事件中的代码 为什么?
2。我想当编辑完毕后 取消treeEditor和tree的关联 免得点击一个节点的时候 再出现编辑框, 编辑只能通过右键菜单才能进行 如何实现呢?
[b]问题补充:[/b]
我把全部代码贴上来吧 请高手帮我看看 我主要想实现的效果是 在树上点击右键菜单中的“修改昵称” 出现treeEditor修改节点名称提交数据库 修改完毕后treeEditor不再显示 除非用户再点击右键菜单中的“修改昵称” 避免用户在树上直接点击昵称修改 请告诉我修改的方法 谢谢啦
这段代码中 还有一个错误 就是运行到
temp_Editor.startEdit(node.ui.textNode);
的时候 会报:“Microsoft JScript 运行时错误: 对象不支持此属性或方法”的错误 为什么呢?想不通 如果把TreeEditor 定义到"修改昵称"中就不会抱错

//用于智能提示显示
///
function ShowQQMenu(node,e,UserID)
{
//编辑Edit
var QQForm_MenuChangeNike_TreeEditor = new Ext.tree.TreeEditor(
Ext.getCmp('QQForm_QQFriendTree')
,{
allowBlank : false
,id:'QQForm_MenuChangeNike_TreeEditor'
,cancelOnEsc : true
,listeners : {
'complete':function(th,newName,oldName){
ModifyQQFriendName(th,node.id,NewName,node.parentNodeId);
}
}
})
//-->右键菜单
//菜单 修改昵称
var QQForm_MenuChangeNike = new Ext.menu.Item({
id:'QQForm_MenuChangeNike'
,name:'QQForm_MenuChangeNike'
,text:'修改昵称'
,checked:true
,listeners:{
'click' : function(th,e)
{
var temp_Editor = Ext.getCmp('QQForm_MenuChangeNike_TreeEditor');
temp_Editor.editNode = node;
temp_Editor.startEdit(node.ui.textNode);
}
}
})
//菜单 添加组
var QQForm_AddQQGroup= new Ext.menu.Item({
id:'QQForm_AddQQGroup'
,name:'QQForm_AddQQGroup'
,text:'添加组'
,checked:true
})
//菜单 进行聊天
var QQForm_MenuChat = new Ext.menu.Item({
id:'QQForm_MenuChat'
,name:'QQForm_MenuChat'
,text:'进行聊天'
,checked:true
,visible : false
,listeners:
{
'click':function(o,e)
{
var temp_FormQQChat = Ext.getCmp('ChatForm|'+node.id);
if (temp_FormQQChat)
{
temp_FormQQChat.setActive(true);
}
else
{
ShowCharForm(UserID, node.id,node.text);
}
}
}
})
//菜单 删除好友
var QQForm_MenuDelete = new Ext.menu.Item({
id:'QQForm_MenuDelete'
,name:'QQForm_MenuDelete'
,text:'删除好友'
,checked:true
})
var QQForm_ContextMenu = new Ext.menu.Menu({
id : 'QQForm_LeafContextMenu'
,name : 'QQForm_LeafContextMenu'
,items:[QQForm_MenuChangeNike,QQForm_MenuChat,QQForm_MenuDelete]
})
//<--右键菜单

if (node.leaf)
{
    QQForm_MenuChangeNike.text = '修改昵称';
    QQForm_MenuChat.setVisible(true);
    QQForm_MenuDelete.setVisible(true);
    QQForm_AddQQGroup.setVisible(false);
    e.preventDefault();
    node.select();
    //var temp_QQForm_ContextMenu = Ext.getCmp('QQForm_ContextMenu');
    QQForm_ContextMenu.showAt(e.getXY());

}
else
{
    QQForm_MenuChangeNike.text = '修改组名';
    QQForm_AddQQGroup.setVisible(true);
    QQForm_MenuChat.setVisible(false);
    QQForm_MenuDelete.setVisible(false);
    e.preventDefault();
    node.select();
    QQForm_ContextMenu.showAt(e.getXY());
}

}
//-----------内部方法-----------------
/*
*修改名称
*/
function ModifyQQFriendName(th,QQFriendID,NewName,ParentID)
{
alert("ssss");
var conn = new Ext.data.Connection();
conn.request({
url:'json/QQ/QQUser.aspx'
,method:'POST'
,params:{FunctionName:'ModifyQQFriend',QQFriendID:QQFriendID,UserID:'-99',UserFriendID:'-99',FriendNike:NewName,IsLeaf:'-99',ParentID:ParentID}
,success : function(responseObject){
var json = Ext.util.JSON.decode(responseObject.responseText);
if (json.success)
{
//成功提交 暂时不处理
}
else
{
Ext.Msg.alert('提示','提交数据发生错误,消息没有成功发送!');
th.cancelEdit(true);
}
}
,failure : function(responseObject){
Ext.Msg.alert('提示','提交数据发生错误,消息没有成功发送!');
th.cancelEdit(true);
}
});
}

[b]问题补充:[/b]
再更新一边格式化的代码看看
[code="java"]//用于智能提示显示
///
function ChangeUserInfo() {
//用户名
var ChangeUserInfoForm_UserName = new Ext.form.TextField({
id: 'ChangeUserInfoForm_UserName',
fieldLabel: ' 登陆名',
allowBlank: false,
emptyText: '请填写 用户名',
maxLength: 15,
maxLengthText: '用户名长度只能在7-15之间',
minLength: 7,
minLengthText: '用户名长度只能在7-15之间',
emptyText: "请输入 用户名"
//,labelWidth:5
});
//昵称
var ChangeUserInfoForm_NikeName = new Ext.form.TextField({
id: 'ChangeUserInfoForm_NikeName',
fieldLabel: ' 用户昵称',
allowBlank: false,
emptyText: '请填写 用户昵称',
maxLength: 15,
maxLengthText: '用户昵称长度只能在1-15之间',
minLength: 1,
minLengthText: '用户昵称长度只能在1-15之间',
emptyText: "请输入 用户昵称"
});
//性别
var ChangeUserInfoForm__sex_data = [['1', '男'], ['2', '女']];
var ChangeUserInfoForm_sex_store = new Ext.data.SimpleStore({
fields: ['value', 'text'],
data: ChangeUserInfoForm__sex_data
});
var ChangeUserInfoForm_Sex = new Ext.form.ComboBox({
id: 'ChangeUserInfoForm_Sex',
hiddenName: 'ChangeUserInfoForm_Sex',
store: ChangeUserInfoForm_sex_store,
emptyText: '请选择性别',
fieldLabel: '性别',
mode: 'local',
triggerAction: 'all',
valueField: 'value',
displayField: 'text',
allowBlank: false,
width: 113,
editable: true,
hiddenName: 'value'
});
//密码
var ChangeUserInfoForm_Password = new Ext.form.TextField({
id: 'ChangeUserInfoForm_Password',
name: 'ChangeUserInfoForm_Password',
fieldLabel: '密码',
inputType: 'password',
labelWidth: 100,
allowBlank: false,
emptyText: '********',
maxLength: 10,
maxLengthText: '密码长度只能在6-10之间',
minLength: 6,
minLengthText: '密码长度只能在6-10之间',
listeners: {
'blur': function (th) {
CheckPassWord();
}
}
});
//密码确认
var ChangeUserInfoForm_ConfirmPassword = new Ext.form.TextField({
id: 'ChangeUserInfoForm_ConfirmPassword',
name: 'ChangeUserInfoForm_ConfirmPassword',
fieldLabel: '确认密码',
inputType: 'password',
labelWidth: 100,
allowBlank: false,
emptyText: '********',
maxLength: 10,
maxLengthText: '密码长度只能在6-10之间',
minLength: 6,
minLengthText: '密码长度只能在6-10之间',
listeners: {
'blur': function (th) {
CheckPassWord()
}
}
});
//邮件地址

var ChangeUserInfoForm_Mail = new Ext.form.TextField({
id: 'ChangeUserInfoForm_Mail',
fieldLabel: '邮箱',
vtype: 'email',
labelWidth: 100,
allowBlank: false,
emptyText: '请填写 邮箱',
regexText: "请输入电子邮件地址"
});
//MSN
var ChangeUserInfoForm_MSN = new Ext.form.TextField({
id: 'ChangeUserInfoForm_MSN',
fieldLabel: 'MSN',
vtype: 'email',
labelWidth: 100,
allowBlank: true,
regexText: "请输入正确的MSN地址"
});
//QQ
var ChangeUserInfoForm_QQ = new Ext.form.NumberField({
id: 'ChangeUserInfoForm_QQ',
name: 'ChangeUserInfoForm_QQ',
fieldLabel: 'QQ',
labelWidth: 100,
allowBlank: true,
maxLength: 8,
minLength: 4,
allowDecimals: false,
minValue: 1000,
minText: '请输入正确的QQ号码',
invalidText: '请输入正确的QQ号码'
});
//取消按钮
var ChangeUserInfoForm_CanelButton = new Ext.Button({
id: 'ChangeUserInfoForm_CanelButton',
text: '取消',
handler: function () {
//this.ownerCt.close();
Ext.getCmp('ChangeUserInfoForm').close();
}
})
//确定按钮
var ChangeUserInfoForm_OKButton = new Ext.Button({
id: 'ChangeUserInfoForm_OKButton',
text: '确定',
handler: function () {
Ext.getCmp('ChangeUserInfoForm').close();
}
})
//返回界面
return new Ext.Window({
id: 'ChangeUserInfoForm',
title: '修改用户信息',
frame: true,
modal: true,
width: 500
//,height:250
,
autoHeight: true
//,autoWidth:true
,
resizable: false,
items: [{
xtype: 'form',
layout: 'column',
border: false,
frame: true,
items: [{
layout: 'form',
border: false,
items: [ChangeUserInfoForm_UserName]
},
{
layout: 'form',
border: false,
items: [ChangeUserInfoForm_NikeName]
}]
},
{
xtype: 'form',
layout: 'column',
border: false,
frame: true,
items: [{
columnWidth: .5,
layout: 'form',
border: false,
items: [ChangeUserInfoForm_Password]
},
{
columnWidth: .5,
layout: 'form',
border: false,
items: [ChangeUserInfoForm_ConfirmPassword]
}]
},
{
layout: 'column',
border: false,
frame: true,
items: [{
columnWidth: .5,
layout: 'form',
border: false,
items: [ChangeUserInfoForm_Sex]
},
{
columnWidth: .5,
layout: 'form',
border: false,
items: [ChangeUserInfoForm_Mail]
}]
},
{
layout: 'column',
border: false,
frame: true,
items: [{
columnWidth: .5,
layout: 'form',
border: false,
items: [ChangeUserInfoForm_MSN]
},
{
columnWidth: .5,
layout: 'form',
border: false,
items: [ChangeUserInfoForm_QQ]
}]
}],
buttons: [ChangeUserInfoForm_CanelButton, ChangeUserInfoForm_OKButton]
})
}[/code]
[b]问题补充:[/b]
刚才那个错了 是这个
[code="java"]//用于智能提示显示
///
function ShowQQMenu(node, e, UserID) {
//编辑Edit
var QQForm_MenuChangeNike_TreeEditor = new Ext.tree.TreeEditor(
Ext.getCmp('QQForm_QQFriendTree'), {
allowBlank: false,
id: 'QQForm_MenuChangeNike_TreeEditor',
cancelOnEsc: true,
listeners: {
'complete': function (th, newName, oldName) {
ModifyQQFriendName(th, node.id, NewName, node.parentNodeId);
}
}
})
//-->右键菜单
//菜单 修改昵称
var QQForm_MenuChangeNike = new Ext.menu.Item({
id: 'QQForm_MenuChangeNike',
name: 'QQForm_MenuChangeNike',
text: '修改昵称',
checked: true,
listeners: {
'click': function (th, e) {
var temp_Editor = Ext.getCmp('QQForm_MenuChangeNike_TreeEditor');
temp_Editor.editNode = node;
temp_Editor.startEdit(node.ui.textNode);
}
}
})
//菜单 添加组
var QQForm_AddQQGroup = new Ext.menu.Item({
id: 'QQForm_AddQQGroup',
name: 'QQForm_AddQQGroup',
text: '添加组',
checked: true
})
//菜单 进行聊天
var QQForm_MenuChat = new Ext.menu.Item({
id: 'QQForm_MenuChat',
name: 'QQForm_MenuChat',
text: '进行聊天',
checked: true,
visible: false,
listeners: {
'click': function (o, e) {
var temp_FormQQChat = Ext.getCmp('ChatForm|' + node.id);
if (temp_FormQQChat) {
temp_FormQQChat.setActive(true);
}
else {
ShowCharForm(UserID, node.id, node.text);
}
}
}
})
//菜单 删除好友
var QQForm_MenuDelete = new Ext.menu.Item({
id: 'QQForm_MenuDelete',
name: 'QQForm_MenuDelete',
text: '删除好友',
checked: true
})
var QQForm_ContextMenu = new Ext.menu.Menu({
id: 'QQForm_LeafContextMenu',
name: 'QQForm_LeafContextMenu',
items: [QQForm_MenuChangeNike, QQForm_MenuChat, QQForm_MenuDelete]
})
//<--右键菜单

    if (node.leaf) {
            QQForm_MenuChangeNike.text = '修改昵称';
            QQForm_MenuChat.setVisible(true);
            QQForm_MenuDelete.setVisible(true);
            QQForm_AddQQGroup.setVisible(false);
            e.preventDefault();
            node.select();
            //var temp_QQForm_ContextMenu = Ext.getCmp('QQForm_ContextMenu');
            QQForm_ContextMenu.showAt(e.getXY());

    }
    else {
            QQForm_MenuChangeNike.text = '修改组名';
            QQForm_AddQQGroup.setVisible(true);
            QQForm_MenuChat.setVisible(false);
            QQForm_MenuDelete.setVisible(false);
            e.preventDefault();
            node.select();
            QQForm_ContextMenu.showAt(e.getXY());
    }

}
//-----------内部方法-----------------
/*
*修改名称
*/
function ModifyQQFriendName(th, QQFriendID, NewName, ParentID) {
alert("ssss");
var conn = new Ext.data.Connection();
conn.request({
url: 'json/QQ/QQUser.aspx',
method: 'POST',
params: {
FunctionName: 'ModifyQQFriend',
QQFriendID: QQFriendID,
UserID: '-99',
UserFriendID: '-99',
FriendNike: NewName,
IsLeaf: '-99',
ParentID: ParentID
},
success: function (responseObject) {
var json = Ext.util.JSON.decode(responseObject.responseText);
if (json.success) {
//成功提交 暂时不处理
}
else {
Ext.Msg.alert('提示', '提交数据发生错误,消息没有成功发送!');
th.cancelEdit(true);
}
},
failure: function (responseObject) {
Ext.Msg.alert('提示', '提交数据发生错误,消息没有成功发送!');
th.cancelEdit(true);
}
});
}[/code]

  • 写回答

4条回答 默认 最新

  • zhoujuan520 2009-07-30 15:09
    关注

    [code="js"]
    //对象没有必要全部分开来定义,该分的分,不该分的就定义在父对象里面即可.
    function ShowQQMenu(node, e, UserID) {
    //编辑Edit
    var QQForm_MenuChangeNike_TreeEditor = new Ext.tree.TreeEditor(
    Ext.getCmp('QQForm_QQFriendTree'), //你这里是引用哪里的对象了?为什么要这样呢?这样引用会出乱子的.
    {
    allowBlank: false,
    id: 'QQForm_MenuChangeNike_TreeEditor',
    cancelOnEsc: true,
    listeners: {
    'complete': function (th, newName, oldName) {
    ModifyQQFriendName(th, node.id, NewName, node.parentNodeId);
    }
    }
    })
    //-->右键菜单
    //菜单 修改昵称
    var QQForm_MenuChangeNike = new Ext.menu.Item({
    id: 'QQForm_MenuChangeNike',
    name: 'QQForm_MenuChangeNike',
    text: '修改昵称',
    checked: true,
    listeners: {//handler : Function 每个 Item都有对应的handler属性,就是来绑定单击事件的,没有必要用监听单击事件的写法来写.
    'click': function (th, e) {
    var temp_Editor = Ext.getCmp('QQForm_MenuChangeNike_TreeEditor');
    temp_Editor.editNode = node;
    temp_Editor.startEdit(node.ui.textNode);
    }
    }
    })
    //菜单 添加组
    var QQForm_AddQQGroup = new Ext.menu.Item({
    id: 'QQForm_AddQQGroup',
    name: 'QQForm_AddQQGroup',
    text: '添加组',
    checked: true
    })
    //菜单 进行聊天
    var QQForm_MenuChat = new Ext.menu.Item({
    id: 'QQForm_MenuChat',
    name: 'QQForm_MenuChat',
    text: '进行聊天',
    checked: true,
    visible: false,
    listeners: {
    'click': function (o, e) {
    var temp_FormQQChat = Ext.getCmp('ChatForm|' + node.id);
    if (temp_FormQQChat) {
    temp_FormQQChat.setActive(true);
    }
    else {
    ShowCharForm(UserID, node.id, node.text);
    }
    }
    }
    })
    //菜单 删除好友
    var QQForm_MenuDelete = new Ext.menu.Item({
    id: 'QQForm_MenuDelete',
    name: 'QQForm_MenuDelete',
    text: '删除好友',
    checked: true
    })

    var QQForm_ContextMenu = new Ext.menu.Menu({
        id: 'QQForm_LeafContextMenu',
        name: 'QQForm_LeafContextMenu',
        items: [QQForm_MenuChangeNike, QQForm_MenuChat, QQForm_MenuDelete]//你完全可以把上面定义的子对象全部定义到这个items里面来.这样看起来也好,管理业方便.
    })
    //<--右键菜单
    //想用右键菜单不是在这里弄的,是要在你那颗树上去监听或者直接写在树上面,这个官网都有示例,api里面也有说明
    

    /*这个是api里面的示例
    new Ext.tree.TreePanel({
    title: 'My TreePanel',
    root: new Ext.tree.AsyncTreeNode({
    text: 'The Root',
    children: [
    { text: 'Child node 1', leaf: true },
    { text: 'Child node 2', leaf: true }
    ]
    }),
    contextMenu: new Ext.menu.Menu({
    items: [{
    id: 'delete-node',
    text: 'Delete Node'
    }],
    listeners: {
    itemclick: function(item) {
    switch (item.id) {
    case 'delete-node':
    var n = item.parentMenu.contextNode;
    if (n.parentNode) {
    n.remove();
    }
    break;
    }
    }
    }
    }),
    listeners: {
    contextmenu: function(node, e) {
    node.select();
    var c = node.getOwnerTree().contextMenu;
    c.contextNode = node;
    c.showAt(e.getXY());
    }
    }
    });

    /*
    if (node.leaf) {
    QQForm_MenuChangeNike.text = '修改昵称';
    QQForm_MenuChat.setVisible(true);
    QQForm_MenuDelete.setVisible(true);
    QQForm_AddQQGroup.setVisible(false);
    e.preventDefault();
    node.select();
    //var temp_QQForm_ContextMenu = Ext.getCmp('QQForm_ContextMenu');
    QQForm_ContextMenu.showAt(e.getXY());

    }
    else {
        QQForm_MenuChangeNike.text = '修改组名';
        QQForm_AddQQGroup.setVisible(true);
        QQForm_MenuChat.setVisible(false);
        QQForm_MenuDelete.setVisible(false);
        e.preventDefault();
        node.select();
        QQForm_ContextMenu.showAt(e.getXY());
    }
    

    }
    //-----------内部方法-----------------
    /*
    *修改名称
    */
    function ModifyQQFriendName(th, QQFriendID, NewName, ParentID) {
    alert("ssss");
    var conn = new Ext.data.Connection();
    conn.request({
    url: 'json/QQ/QQUser.aspx',
    method: 'POST',
    params: {
    FunctionName: 'ModifyQQFriend',
    QQFriendID: QQFriendID,
    UserID: '-99',
    UserFriendID: '-99',
    FriendNike: NewName,
    IsLeaf: '-99',
    ParentID: ParentID
    },
    success: function (responseObject) {
    var json = Ext.util.JSON.decode(responseObject.responseText);
    if (json.success) {
    //成功提交 暂时不处理
    }
    else {
    Ext.Msg.alert('提示', '提交数据发生错误,消息没有成功发送!');
    th.cancelEdit(true);
    }
    },
    failure: function (responseObject) {
    Ext.Msg.alert('提示', '提交数据发生错误,消息没有成功发送!');
    th.cancelEdit(true);
    }
    });
    }
    [/code]

    把代码书写正确再说问题.

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

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘