jqGrid禁用dataUrl加载的下拉列表

时间:2011-02-15 10:28:25

标签: jquery jqgrid

我有以下问题:

在jqGrid中有一个带有选项dataUrl的下拉列表,用于从服务器获取数据。 如果我单击表单编辑(或添加)下拉列表是正常的,但如果该行已存在,我需要禁用它。我通过使用afterShowForm事件看到它,它只在下拉列表已经填充时(第一次之后)才有效。第一次,似乎在dataUrl填充下拉列表之前触发了AfterShowForm。

我该如何解决这个问题?

5 个答案:

答案 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

    }       
}