JQGRID-如何在内联/表单编辑中发送/读取来自不同列的值?

JQGRID-如何在内联/表单编辑中发送/读取来自不同列的值?,jqgrid,Jqgrid,我有3个复选框列和相应的日期列。所以,我试图实现的是,当用户在内联编辑过程中单击复选框并单击enter时,今天的日期将被发送并设置为指定列中另一个单元格的值。如何实现?我收到了OLEG关于在表单编辑中执行此操作的事先指示,但我希望在内联编辑中执行此操作。我已经启用了这两个选项,但是在内联编辑期间只有复选标记是可编辑的。我禁用了所有其他字段,但复选框列除外。任何想法都将不胜感激 更新好的,我用下面的代码解决了问题。谢谢奥列格的帮助 当前日期函数: var date = new Date(Date.

我有3个复选框列和相应的日期列。所以,我试图实现的是,当用户在内联编辑过程中单击复选框并单击enter时,今天的日期将被发送并设置为指定列中另一个单元格的值。如何实现?我收到了OLEG关于在表单编辑中执行此操作的事先指示,但我希望在内联编辑中执行此操作。我已经启用了这两个选项,但是在内联编辑期间只有复选标记是可编辑的。我禁用了所有其他字段,但复选框列除外。任何想法都将不胜感激

更新好的,我用下面的代码解决了问题。谢谢奥列格的帮助

当前日期函数:

var date = new Date(Date.now());
console.log(todayDate(date));
function todayDate(date){
return (date.getMonth() + 1) + "/" + date.getDate() + "/" + date.getFullYear();
    } 
检查列代码:

        { name: "devc", index: "devc",width: 25, align: "right", formatter: "checkbox", 
    editable: true, edittype: "checkbox",editoptions: {value: "Yes:No",defaultValue: "No",
dataEvents: [{type: "change", fn: function (e) {var $this = $(e.target), columnName = "devdate", rowid, cellId;
                                if ($this.hasClass("FormElement")) {
                                    // form editing
                                    cellId = columnName;
                                } else if ($this.closest("td").hasClass("edit-cell")) {
                                    // cell editing
                                    return; // no other editing field exist - nothing to do
                                } else {
                                    // inline editing
                                    rowid = $this.closest("tr.jqgrow").attr("id");
                                    cellId = rowid + "_" + columnName;
                                }
                                $("#" + $.jgrid.jqID(cellId)).val($this.is(":checked") ?
                                    (todayDate(date)) : "");} }]}}
为了能够在
dataEvents
中定义的某些事件处理程序中处理另一个编辑字段,您需要对不同编辑模式使用的ID使用相应的名称转换

表单编辑创建具有与
colModel
中的
name
属性相同的
id
属性的编辑元素。内联编辑允许同时编辑多行。因此,它使用另一条规则来构建id值:rowid值将被
追加,然后在
colModel
中追加
name
属性的值。在单元格编辑期间,jqGrid只允许编辑一个单元格。因此,访问
dataEvents
中定义的某个事件处理程序中的另一个编辑字段没有意义

提供一个检测
dataEvents
的事件处理程序内部编辑模式的示例

让我们让您拥有列
{name:“appc”,格式化程序:“checkbox”,可编辑:true,edittype:“checkbox”,…}
,并且您需要为该列定义
change
事件处理程序。让我们使用另一个文本列
{name:“appdate”,可编辑:true,…}
,您希望在选中/取消选中
appc
列中的复选框时更改
appdate
列编辑字段的值。在这种情况下,您可以执行以下操作:

{name:“appdate”,可编辑:true,…},
{name:“appc”,格式化程序:“checkbox”,可编辑:true,编辑类型:“checkbox”,
编辑选项:{
数据事件:[{
键入:“更改”,
fn:功能(e){
var$this=$(e.target),columnName=“appdate”,rowid,cellId;
if($this.hasClass(“FormElement”)){
//表单编辑
cellId=列名;
}else if($this.closest(“td”).hasClass(“编辑单元格”)){
//单元编辑
return;//不存在其他编辑字段-无需执行任何操作
}否则{
//内联编辑
rowid=$this.nexist(“tr.jqgrow”).attr(“id”);
cellId=rowid+“”+columnName;
}
//设置另一个编辑字段的值
//我们使用下面的$.jgrid.jqID(cellId)代替cellId
//只是为了确保下一行工作正常
//即使columnName包含特殊的元字符
//像空格或“\$%&'()*+,./:;?@[\]^`{124;}”~
$(“#”+$.jgrid.jqID(cellId)).val($this.is(“:checked”)?
“选中文本”:“未选中文本”);
} 
}]
}
}
已更新:可以将问题中的代码修改为以下内容:

var date=新日期(date.now()),
todayDate=函数(日期){
return(date.getMonth()+1)+“/”+date.getDate()+
“/”+date.getFullYear();
},
checkBoxChange=功能(e){
var$this=$(e.target),columnName=e.data.dateColumn,
罗维德,细胞;
if($this.hasClass(“FormElement”)){
//表单编辑
cellId=列名;
}else if($this.closest(“td”).hasClass(“编辑单元格”)){
//单元编辑
return;//不存在其他编辑字段-无需执行任何操作
}否则{
//内联编辑
rowid=$this.nexist(“tr.jqgrow”).attr(“id”);
cellId=rowid+“”+columnName;
}
$(“#”+$.jgrid.jqID(cellId)).val($this.is(“:checked”)?
(今日)(日期):";;
};
...
...
{name:“appdate”,可编辑:true,…},
{name:“appc”,格式化程序:“checkbox”,可编辑:true,
编辑类型:“复选框”,
编辑选项:{
数据事件:[{
键入:“更改”,
数据:{dateColumn:“appdate”},
fn:checkBoxChange
}]
}},
{name:“devdate”,可编辑:true,…},
{name:“devc”,格式化程序:“checkbox”,可编辑:true,
编辑类型:“复选框”,
编辑选项:{
数据事件:[{
键入:“更改”,
数据:{dateColumn:“devdate”},
fn:checkBoxChange
}]
}}

可以看到,我们使用了
数据:{dateColumn:“devdate”}
数据:{dateColumn:“appdate”}
作为
dataEvents
项的附加属性。在
fn:checkBoxChange
中使用的事件处理程序
checkBoxChange
可以通过用法
e.data.dateColumn
访问
数据
。就像可以轻松地为多个列共享同一事件处理程序一样。

@NewHistoricForm:您写得不够清楚您想在字段中写入的内容。您可以写入所需的值。在您编写的问题文本中,您可以仅在某个字段为空时设置当前日期。您可能需要测试
$(“#”+$.jgrid.jqID(cellId)).val()
如果该问题不为空且复选框已设置,则您可以设置当前日期。规则是,如果问题不太具体,则该问题具有一定的价值。我不相信其他人需要根据某个复选框设置日期,但我相信可以接受