jQgrid内联编辑用onchange替换回车键保存

时间:2013-08-22 18:02:50

标签: jquery jqgrid

我有一个包含两列的jQgrid,一个Name列和一个Score列。只有“得分”列可以编辑。用户从下拉列表中选择一个分数。他们按下Enter键并保存分数。但是,用户不想按Enter键。他们希望在下拉列表中选择得分时保存得分(基本上是onchange事件)。

分数代码如下所示:

{name:'RatersScore', index:'RatersScore', width:200, align:'center', sortable:true, search:false, editable: true, edittype: 'select', editoptions: { value: "6.0:6.0;6.5:6.5;7.0:7.0;7.5:7.5;8.0:8.0;8.5:8.5;9.0:9.0;9.5:9.5;10.0:10.0", dataEvents: [{ type: 'change', fn: function(e) {myfunction(); } },]}},

但是,当用户从下拉列表中选择分数时,没有任何反应。更改未触发myfunction()。

用户正在使用IE 8。

2 个答案:

答案 0 :(得分:2)

如果你仔细看看他们的Documentation,你可以找到用于此目的的方法(saveRow),

{ name: 'Decision', width: 200, editable: true, formatter: 'select', edittype: 'select', editoptions: {
                        value: {
                            '1': 'First Option',
                            '2': 'Second Option',
                            '3': 'third Option'
                        },
                        dataEvents: [
                                {
                                    type: 'change',
                                    fn: function (e) {
                                        var row = $(e.target).closest('tr.jqgrow');
                                        var rowId = row.attr('id');
                                        jQuery("#jQGridId").saveRow(rowId, false, 'clientArray');
                                    }
                                }
                            ]
                    }
                    },

DataEvent中的函数会针对change事件的每个下拉列表触发, 希望能帮助到你。欢呼声。

答案 1 :(得分:0)

我怀疑这是一个优雅的解决方案,但这对我有用。

{name:'RatersScore', index:'RatersScore', width:200, align:'center', sortable:true, search:false, editable: true, edittype: 'select', editoptions: { value: "6.0:6.0;6.5:6.5;7.0:7.0;7.5:7.5;8.0:8.0;8.5:8.5;9.0:9.0;9.5:9.5;10.0:10.0", dataEvents: [{ type: 'change', fn: function(e) {
var thescore = $(e.target).val();
var row = $(e.target).closest('tr.jqgrow');
var thisid= row.attr('id');
var f = $("#frmscores");
var action = '/myController/MyAction?thescore='+thescore+'&theraterid='+thisid;
var serializedForm = f.serialize();
$.post(action, serializedForm,checkscoreResponse,"json");
$('#mygrid').trigger( 'reloadGrid' );
} },]}},

在这种情况下不需要序列化,但无论如何我都把它留在那里。我猜测有一种比使用我在这里的类似AJAX的代码更好的方法。必须有一个更好的JQuery函数。