我的数据库中有true / false值.我想用jqgrid中的复选框更新它们.
一旦将值设置为true,它将保持为true且不应更改.请看一下我的专栏模型:
一旦将值设置为true,它将保持为true且不应更改.请看一下我的专栏模型:
{ name : 'available',width : 12,resizable: true,editable: true,align: 'center',edittype:'checkBox',formatter: "checkBox",formatoptions: {disabled : false},classes:'check',editrules:{required:false},editoptions:{size:39,value:"True:False"} }
我正在尝试在选中复选框时捕获事件,目前它们都未经检查,到目前为止我已经尝试过:
jq(".check input").each(function(){ jq(this).click(function(){ aler("works"); }); }); jq("input[type='checkBox']").change(function(){ alert("works"); }); jq(":checkBox").parent().click(function(evt) { if (evt.target.type !== 'checkBox') { var $checkBox = jq(":checkBox",this); $checkBox.attr('checked',!$checkBox.attr('checked')); $checkBox.change(); alert(""); } });
这些都不起作用,我被卡住了,不知道还有什么可以尝试的.
使用firebug检查复选框代码时,它看起来像这样:
<input type="checkBox" offval="no" value="false">
解决方法
自定义格式化程序的使用是其中一种可能性.也可以使用不引人注目的onclick绑定样式
第一个定义
var grid = $("#list"),getColumnIndexByName = function(columnName) { var cm = grid.jqGrid('getGridParam','colModel'),i=0,l=cm.length; for (; i<l; i++) { if (cm[i].name===columnName) { return i; // return the index } } return -1; },disableIfChecked = function(elem){ if ($(elem).is(':checked')) { $(elem).attr('disabled',true); } };
然后一个可以在loadComplete中使用代码就好了
loadComplete: function() { var i=getColumnIndexByName('closed'); // nth-child need 1-based index so we use (i+1) below $("tbody > tr.jqgrow > td:nth-child("+(i+1)+") > input",this).click(function(e) { disableIfChecked(this); }).each(function(e) { disableIfChecked(this); }); }
请参阅相应的演示here.