我有以下问题:
在jqGrid中有一个带有选项dataUrl
的下拉列表,用于从服务器获取数据。
如果我单击表单编辑(或添加)下拉列表是正常的,但如果该行已存在,我需要禁用它。我通过使用afterShowForm事件看到它,它只在下拉列表已经填充时(第一次之后)才有效。第一次,似乎在dataUrl
填充下拉列表之前触发了AfterShowForm。
我该如何解决这个问题?
答案 0 :(得分:4)
在我看来,禁用下拉列表的最简单方法是在buildSelect
之外的dataUrl
中使用dataUrl
事件。如果buildSelect
返回的数据已经正确
表单recreateForm:true
只能返回输入参数,但可以另外禁用
您还应该使用var needDisable=true;
$("#list").jqGrid({
colModel:[
{name:'myDropDown',editable: true,edittype:"select",
editoptions:{dataUrl:'myDropDown.txt',
buildSelect: function(data) {
var field_id=this.id; // "myDropDown"
setTimeout(function(){
if (needDisable) {
$('#tr_'+field_id).attr('disabled','disabled');
} else {
$('#tr_'+field_id).removeAttr('disabled');
}
}, 100);
return data;
}
},
// ... other colModel columns
],
// ... other jqGrid parameters
}).jqGrid('navGrid','#pager',{},
{ // Edit form parameters
recreateForm:true,
beforeShowForm:function(form){
needDisable=true;
}
},
{ // Add form parameters
recreateForm:true,
beforeShowForm:function(form){
needDisable=false;
}
});
表单来确保始终调用所有回调。代码架构可以是以下内容:
{{1}}
答案 1 :(得分:0)
我不得不想出这个列表问题的解决方案。添加行时,我会显示现有值的列表,并且还有一个文本字段供用户在需要时添加新值(我的组合框版本)。编辑行时,我想在文本字段而不是列表中显示值,然后删除“添加”字段。此外,一旦该行存在,该值就不可编辑。
我的解决方案:
navigatorAddOptions和navigatorEditOptions分别使用beforeInitData:beforeAdd和beforeInitData:beforeEdit。 beforeShowForm不起作用。两者都使用recreateForm:true。
之前......功能:
function beforeAdd(formid) {
$("#gridTable").jqGrid('setColProp','listfield',{edittype:'select',editoptions:{readonly:false,dataUrl:'url_to_list.action'}});
$("#gridTable").jqGrid('setColProp','newvaluefield',{hidden:false});
};
function beforeEdit(formid) {
$("#gridTable").jqGrid('setColProp','listfield',{edittype:'text',editoptions:{readonly:true}});
$("#gridTable").jqGrid('setColProp','newvaluefield',{hidden:true});
};
答案 2 :(得分:0)
// WORKS:隐藏工具栏下拉选择
// $(“#”+ columnNames [i])。haide();
答案 3 :(得分:0)
如果你的名字是pid
的列名,我就是这样得到的
编辑
beforeShowForm:function(form)
$("#tr_pid").find("input,button,textarea,select").attr("disabled",true);
}
添加
beforeShowForm:function(form){
$("#tr_pid").find("input,button,textarea,select").attr("disabled",false);
}
答案 4 :(得分:0)
对我来说,这里的答案没有用,或者太复杂了。
在我的情况下,我想等待一个特定的下拉列表存在并有一个选定的值。(但你可以使用其他标准....)
我的下拉列表是使用dataURL来加载项目,所以它需要花一些时间才能在屏幕上显示。
如果有人在谷歌搜索中找到如何等待控件加载第一次编辑/添加表单显示 ....
我的解决方案是JavaScript中的递归和setTimeout的组合:
map_dbl(seq_len(m), ~mean(rpois(n, l)))
我把它连接到网格上:
function WaitForDropDownToBeLoadedAndProcess() {
var dropDownVal= $("#MyDropDown").val();
if (!dropDownVal) {//if the value is undefined called this method recursively
setTimeout(function() {//use setTimeout to avoid blocking
WaitForDropDownToBeLoadedAndProcess();
}, 150);
} else {//if the dropdown has a value
//do your logic here... like disabling the control or set value
}
}