我有以下問題加載一個下拉:jqGrid的禁用由dataUrl
裏面一個jqGrid的存在與選項dataUrl
從服務器獲取數據的下拉列表。 如果我單擊窗體編輯(或添加)下拉列表是好的,但如果行已存在,我需要禁用它。我看到通過使用afterShowForm事件,它僅在下拉列表已經填充(第一次後)時才起作用。第一次,在下拉菜單填充dataUrl
之前,似乎afterShowForm被觸發。
我該如何解決這個問題?
我有以下問題加載一個下拉:jqGrid的禁用由dataUrl
裏面一個jqGrid的存在與選項dataUrl
從服務器獲取數據的下拉列表。 如果我單擊窗體編輯(或添加)下拉列表是好的,但如果行已存在,我需要禁用它。我看到通過使用afterShowForm事件,它僅在下拉列表已經填充(第一次後)時才起作用。第一次,在下拉菜單填充dataUrl
之前,似乎afterShowForm被觸發。
我該如何解決這個問題?
在我看來,禁用下拉菜單的最簡單方法是使用editoptions中的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;
}
});
我不得不想出瞭解決這個列表問題的解決方案。添加一行時,我顯示一個現有值列表,並且還有一個文本字段,供用戶在需要時添加新值(我的組合框版本)。在編輯一行時,我想在文本字段而不是列表中顯示該值,並刪除「添加」字段。此外,該行一旦存在,該值就不可編輯。
我的解決方案:分別beforeEdit:
navigatorAddOptions和navigatorEditOptions使用beforeInitData:beforeAdd和beforeInitData。 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});
};
// WORKS:隱藏工具欄下拉菜單中選擇
// $( 「#」 + COLUMNNAMES [1]).hide();
如果你有名稱的列名是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);
}
對我來說,答案在這裏沒有工作還是太複雜了。
在我的情況,我想等待一個特定的下拉列表存在,並且有一個選擇的值。(但是你可以用其他的標準....)
我的下拉菜單是使用dataURL加載項目,以便它需要一段時間才能在屏幕上顯示。
如果有人從谷歌搜索這裏登陸到如何等待控件加載到首次編輯/添加窗體顯示 ....
我的解決辦法是遞歸和的setTimeout的在JavaScript的組合:
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
}
}
我迷上它給電網這樣的:
afterShowForm:function(formid) {
WaitForDropDownToBeLoadedAndProcess();
}
@Angelinux:歡迎您!順便說一下,從15點的聲望開始,您有權使用投票方式提供有用的問題或答案(有關更多信息,請參閱http://stackoverflow.com/faq#howtoask)。該功能可幫助其他人更有效地搜索有關計算器上的信息。 – Oleg 2011-02-15 15:28:28