【问题标题】:jqGrid - how to have hidden fields in an edit formjqGrid - 如何在编辑表单中隐藏字段
【发布时间】:2010-03-03 00:45:13
【问题描述】:

我希望能够在用户尝试编辑行时将字段传递到编辑表单中,但我不希望这些字段可编辑 - 我希望将它们隐藏起来,以便它们仍然被发送到服务器。

例如:

colModel :[
    {label: 'Game ID', name: 'game_id', editable:true},
    {label: 'Component ID', name: 'component_id', editable:true},
    {label: 'Table ID', name: 'table_id', editable:true},
],

这会将它们传递给编辑表单(因为editable:true),但不幸的是,用户可以编辑它们。我想隐藏这些字段,以便用户无法编辑它们。

我该怎么做?

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    现在 jqGrid 中通过 edithidden 属性支持这一点:

    colModel: [
        { name: 'optionValue', key: true, index: 'optionValue', width: 55, editable: true,     hidden: true, editrules: { edithidden: false } },
    

    设置为 false 将其隐藏在添加/编辑表单中。

    【讨论】:

    • 知道这是在哪个版本中实现的吗?
    【解决方案2】:

    编辑

    好的,事实证明您可以将自定义元素定义为edittype。根据您的情况,您可以执行以下操作:

    colModel :[
        {label: 'Game ID', name: 'game_id', editable:true, edittype:'custom',editoptions:{custom_element:myelem,custom_value:myval}},
        {label: 'Component ID', name: 'component_id', editable:true, edittype:'custom',editoptions:{custom_element:myelem,custom_value:myval} },
        {label: 'Table ID', name: 'table_id', editable:true, edittype:'custom',editoptions:{custom_element:myelem,custom_value:myval}}
    ]
    

    然后你会像这样定义myelem 和myval:

    function myelem(value,options){
       return $('<input type="text" value="'+value+'" disabled="disabled"/>');
    }
    
    function myval(elem){
        return elem.val();
    }
    

    这将构建一个禁用的文本字段,并且看起来不像 afterShowForm 那样骇人听闻。

    原创

    如果您使用的是编辑表单控件(不是内联编辑),看起来您必须提供一个afterShowForm 函数(向下滚动到“事件”部分)。见this question。

    您似乎希望列显示在视图中,但不可编辑。如果您设置editable:true,那么用户无论如何都可以编辑该字段。您最终要做的是禁用/将表单元素设置为隐藏,这样用户就无法更改它的值。 afterShowForm 然后看起来像:

    afterShowForm: function(eparams){
        // change the selector appropriately
        $('#jqGrid input[name=game_id]').attr('type','hidden');
       // or $('#jqGrid input[name=game_id]').attr('disabled','disabled');
    }
    

    【讨论】:

    • editrules 似乎不起作用,但 afterShowForm (有点骇人听闻)可以。
    • 好的,找到了一种不那么复杂的方法。见编辑。归结为使用 edittype: 'custom' 的自定义字段。
    【解决方案3】:

    我认为更简洁的方法是 onclickSubmit 事件 - 您可以添加要提交的额外字段。

    var gr = jQuery("#table").jqGrid('getGridParam', 'selrow');
    var row = jQuery("#table").getRowData(gr);
    
    return { Id: row.Id };
    

    【讨论】:

      【解决方案4】:

      如果您可以信任最终用户,您可以简单地添加 editoptions 属性并将 disabled 参数设置为 disabled,如下所示:

      colModel: [
          { name: 'your_field_name', editable: true, hidden: true, search:false, editoptions: {'disabled':'disabled'}},
      ]
      

      【讨论】:

        【解决方案5】:

        试试这个:

        beforeShowForm: function (formid)
        {
            $("#tr_name",formid).hide(); 
        },
        

        【讨论】:

        • 你能显示整个脚本吗?我在实现这一点时遇到了一些问题。 // $("#JQGrid1").jqGrid({ // // beforeShowForm: function (formid) { // $("#CREATE_DATE").hide(); // } // });这就是它的实现方式吗?谢谢!
        【解决方案6】:

        如果将信息传递给您的编辑数据库函数,您可以通过 URL 传递附加参数

        editurl:"database_edit.asp?user_id="+user_id
        

        不一定是更好的方法 - 只是一种不同的方法。

        干杯

        保罗

        【讨论】:

        • 抱歉,这行不通。您不能在 jqgrid 中传递这样的动态值(连同 url)。您必须使用PostData 功能来传递动态值。
        【解决方案7】:

        试试这个:

        colModel: [
            { name: 'your_field_name', editable: true, hidden: true, search:false, editoptions: {style:'display:none;'}},
        ]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多