1

我正在使用表单编辑。我想根据下拉框中的选择禁用添加和编辑表单中的某些字段。最好使用什么事件来触发它?我曾尝试使用 dataEvents:

{    name:'type_cd', 
     edittype:'select', 
     editoptions:{
        dataUrl:'functions.php',
            dataEvents:[{
                type:'change',
                fn: function(e){
                    $(this).setColProp('cntrct_id',{
                         editoptions:{editable:false}
                    });
            } 
       }]                        
    } 
},

这对我的表单字段没有明显的影响,但我知道它正在被访问,因为如果我输入一个,我可以从中收到一条警报消息。

编辑

如果我提交表单,下次打开它时,设置为 editable:false 的列将不会出现。这是朝着正确方向迈出的一步,但我希望它立即不可编辑。真的,我希望它可见,但禁用(即禁用:true)

4

2 回答 2

4

首先dataEvents允许您在编辑元素的元素上注册回调。内部回调this将被初始化为将被绑定的 DOM 元素。所以$(this)change处理程序内部,它将是<select>元素上的包装器,而不是网格上的包装器。的用法$(this).setColProp将不正确。

要禁用添加/编辑表单中的某些输入字段,您可以使用所有输入元素id与. 因此,如果您需要禁用输入,可以将属性设置为元素namecolModelcntrct_iddisabledtrueid="cntrct_id"

{
     name: 'type_cd', 
     edittype: 'select', 
     editoptions: {
        dataUrl: 'functions.php',
        dataEvents: [{
            type: 'change',
            fn: function (e) {
                // disable input/select field for column 'cntrct_id'
                // in the edit form
                $("#cntrct_id").prop("disabled", true);
            } 
       }]                        
    } 
}

重要的是要了解editoptions它将用于任何现有的编辑模式(表单编辑、内联编辑和单元格编辑)。如果要编写dataEvents支持所有编辑模式的代码,则必须检测编辑模式并使用一些其他编辑字段的 id。代码(未测试)大概如下

{
     name: 'type_cd', 
     edittype: 'select', 
     editoptions: {
        dataUrl: 'functions.php',
        dataEvents: [{
            type: 'change',
            fn: function (e) {
                var $this = $(e.target), $td, rowid;
                // disable input/select field for column 'cntrct_id'
                if ($this.hasClass("FormElement")) {
                    // form editing
                    $("#cntrct_id").prop("disabled", true);
                } else {
                    $td = $this.closest("td");
                    if ($td.hasClass("edit-cell") {
                        // cell editing
                        // we don't need to disable $("#cntrct_id")
                        // because ONLY ONE CELL are edited in cell editing mode
                    } else {
                        // inline editing
                        rowid = $td.closest("tr.jqgrow").attr("id");
                        if (rowid) {
                            $("#" + $.jgrid.jqID(rowid) + "_cntrct_id")
                                .prop("disabled", true);
                        }
                    }
                }
            } 
       }]                        
    } 
}

最后一句话。如果您仍然使用不支持prop方法的旧版本 jQuery(jQuery 1.6 之前),则必须改用attr

于 2013-02-19T18:38:19.100 回答
-1

@Oleg:这是有效的(可以收到警报消息),但它没有禁用该字段。表单字段是否需要任何特殊值?

于 2013-11-13T18:05:53.140 回答