应项目需求实现jqgrid中表格为textarea时高度自适应
jqgrid官网地址:http://blog.mn886.net/jqGrid/
在jqgrid中 编辑状态时的表格 为input,textarea,select时回车事件将触发单元格保存"saveCell";
源码:
1.在源码中搜索"textarea"找到到这段代码,将$("input, select, textarea",cc)中的textarea去掉(个人方法,请参考使用,将不再触发textarea的回车保存!):
$("input, select, textarea",cc).bind("keydown",function(e) {
if (e.keyCode === 27) {
if($("input.hasDatepicker",cc).length >0) {
if( $(".ui-datepicker").is(":hidden") ) {
$($t).jqGrid("restoreCell",iRow,iCol);
}else { $("input.hasDatepicker",cc).datepicker('hide'); }
} else {
$($t).jqGrid("restoreCell",iRow,iCol);
}
} //ESC
if (e.keyCode === 13) {
$($t).jqGrid("saveCell",iRow,iCol);
// Prevent default action
return false;
} //Enter
if (e.keyCode === 9) {
if(!$t.grid.hDiv.loading ) {
if (e.shiftKey) {$($t).jqGrid("prevCell",iRow,iCol);} //ShiftTAb
else {$($t).jqGrid("nextCell",iRow,iCol);} //Tab
} else {
return false;
}
}
e.stopPropagation();
});
2.通过"textarea"搜索找到此段代码(textarea回车高度自适应解决方法):
case "textarea" :
elem = document.createElement("textarea");
if(autowidth) {
if(!options.cols) { $(elem).css({width:"98%"});}
} else if (!options.cols) { options.cols = 20; }
if(!options.rows) { options.rows = 2; }
if(vl===' ' || vl===' ' || (vl.length===1 && vl.charCodeAt(0)===160)){vl="";}
elem.value = vl;
setAttributes(elem, options);
$(elem).attr({"role":"textbox","multiline":"true"});
break;
在此处$(elem).attr({"role":"textbox","multiline":"true"});通过添加"onkeyup"来实现,
$(elem).attr({"role":"textbox","multiline":"true","onkeyup":"adaption(this)"});
函数:adaption 自定义函数,可根据需要是否放入源码。
function adaption(dom){
var val = dom.value;
$(dom).height(val.split('\n').length * 20);
};
以上两点已经实现jqgrid在textarea状态回车撑起自身高度,但还需添加一句(在第2点源代码elem.value = vl后添加):
$(elem).height(elem.value.split('\n').length * 20);
完结!
小打小闹,欢迎指正!