0

我有一个包含两列的 jQgrid,一个名称列和一个分数列。只有分数列是可编辑的。用户从下拉列表中选择一个分数。他们按下 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。

4

2 回答 2

2

如果您仔细查看他们的文档,您会发现用于此目的的方法 (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 中的函数会针对更改事件的每个下拉菜单触发,希望对您有所帮助。干杯。

于 2013-10-01T15:01:11.327 回答
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函数。

于 2013-08-22T19:43:56.160 回答