Jqgrid,dataEvent不适用于edittype:custom

时间:2012-02-08 17:25:32

标签: jquery jquery-ui jquery-plugins jqgrid

我是jqgrid的新手,我有一个编辑类型为自定义的列。

一旦编辑了行数据,我希望行保存在模糊上(当我点击所选行的外部时),为此我使用了dataEvent,但它不起作用。

我正在使用Jqgrid版本4.1。

有人可以帮我解决这个问题。

我在下面附上了一段代码:

{ name: 'Roles', index: 'Roles', align: 'left', editable: true, 
  edittype: "custom",
  editoptions: {custom_element: renderRoleColumn, custom_value: roleColumnValue,
                dataEvents: [{ type: 'blur',
                               fn: function (e) {
                                    alert("roles");
                               }
                             }]
               }
}

1 个答案:

答案 0 :(得分:2)

你是对的。 jqGrid的当前实现不使用dataInitdataEvents(请参阅jqGrid的the source code不要像所有其他编辑类型一样调用options = bindEv(elem,options)。问题只是因为我不确定这是一个错误。在the documentation的jqGrid中,描述了edittype: "custom"的所有步骤。

我不认为这是一个问题。您可以在custom_element内进行任何绑定。您没有发布您使用的renderRoleColumnroleColumnValue的任何代码,但如果您将blur事件句柄绑定到您返回的自定义元素,它将起作用。

更新:您的自定义格式化程序renderRoleColumn会将<div><select>个元素作为子元素返回<input><div>无法获得焦点,也不会处理blur事件。因此,您应该将blur绑定到子元素<select><input>。代码可以类似于以下

function renderRoleColumn() {
    //... your current code which generate HTML fragment in the roleDiv as string

    // create DOM element from the HTML fragment with jQuery wrapper
    var $custom = $(roleDiv);

    // make binding to children
    $custom.find('select,input').blur(function (e) {
        alert('blur on ' +
            e.target.tagName.toLowerCase() +
            ' id=' + e.target.id);
    });

    return $custom[0]; // return roleDiv as DOM element
}