我的网格中有一个简单的内联编辑,我想在用户选中文本框时提交更改. jqGrid的默认行为强制用户按“Enter”提交更改,但这对我们的用户来说是不直观的.
alt text http://i32.tinypic.com/e62iqh.jpg
onSelectRow: function(id) { $(gridCoreGroups).editRow(id,true,undefined,function(response) { alert("hello world"); } }
我已经完成了所提供的事件,但是这些都是由于用户按下“Enter”而发生的,我想避免这种情况.当用户选中此单元格时,是否有可以连接的内容会触发操作?
解决方法
对于在线编辑,您可以通过以下几种方式完成.要使用onSelectRow触发器将onblur事件绑定到输入字段,无需编辑和保存按钮,请执行以下操作:
$('#gridId').setGridParam({onSelectRow: function(id){ //Edit row on select $('#gridid').editRow(id,true); //Modify event handler to save on blur. var fieldName = "Name of the field which will trigger save on blur."; //Note,this solution only makes sense when applied to the last field in a row. $("input[id^='"+id+"_"+fieldName+"']","#gridId").bind('blur',function(){ $('#gridId').saveRow(id); }); }});
要将jQuery实时事件处理程序应用于可能出现在行中的所有输入(jqGrid将所有输入标记为rowId_fieldName),循环抛出网格中的行数并执行以下操作:
var ids = $("#gridId").jqGrid('getDataIDs'); for(var i=0; i < ids.length; i++){ fieldName = "field_which_will_trigger_on_blur"; $("input[id^='"+ids[i]+"_"+fieldName+"']","#gridId").live('blur',function(){ $('#gridId').jqGrid('saveRow',ids[i]); }); }
注意:要像上面一样使用.live()模糊,你需要jQuery 1.4或位于以下位置的补丁:
Simulating “focus” and “blur” in jQuery .live() method
小心rowIds.当您进行排序,添加和删除行时,您可能会发现自己编写了一些棘手的jQuery来将行ID转换为iRows或行号.
如果你像我一样,你进行了单独的单元格编辑,你将需要修改afterEditCell触发器,例如:
$('#gridId').setGridParam({afterEditCell: function(id,name,val,iRow,iCol){ //Modify event handler to save on blur. $("#"+iRow+"_"+name,function(){ $('#gridId').saveCell(iRow,iCol); }); }});
希望有所帮助..