我的经历与 JQGrid 论坛中报道的完全一样。
如果我通过鼠标将一些文本复制并粘贴到搜索字段中(即右键单击,“粘贴”),则不会触发搜索。如果我通过键盘复制和粘贴(例如 Ctrl + C 和 Ctrl + V),则会触发搜索。
即,似乎搜索仅在按键/按键上触发 - 我如何配置网格以识别鼠标粘贴事件?
我的经历与 JQGrid 论坛中报道的完全一样。
如果我通过鼠标将一些文本复制并粘贴到搜索字段中(即右键单击,“粘贴”),则不会触发搜索。如果我通过键盘复制和粘贴(例如 Ctrl + C 和 Ctrl + V),则会触发搜索。
即,似乎搜索仅在按键/按键上触发 - 我如何配置网格以识别鼠标粘贴事件?
你有两个可以尝试的选择。
选项1:
您可以将工具栏设置为仅在输入时进行搜索,方法是在设置工具栏时将 searchOnEnter 设置为 true。这将需要在过滤器发生之前单击输入,无论它是如何输入的
$("#grid_id").jqGrid('filterToolbar',{ searchOnEnter: true });
选项2:(更新以修复错误)
使用 jQuery 检测粘贴事件,然后调用 api 触发工具栏搜索。
var headers = $('.ui-th-column');
$.each(headers, function(index, item) {
var div = $(this).children('div');
if (div.length > 0) {
var input = div.children('input');
if (input.length > 0) {
$(input).bind('paste', function(e) {
var sgrid = $("#grid_id")[0];
sgrid.triggerToolbar();
});
}
}
});
注意:似乎没有办法使用新的 api 触发搜索。
我想我已经破解了。您可以在 searchOptions 的“dataEvents”数组中添加“粘贴”事件:
var colModel = [...,
searchoptions: {
dataEvents: [
{ type: 'paste',
fn: function(e) {
setTimeout(function() {
var sgrid = $("#grid_id")[0];
sgrid.triggerToolbar();
}, 1);
}
}
]}
];
注意 setTimeout 调用- 我发现有必要添加,否则在没有粘贴值的情况下触发搜索
该解决方案与@fbfcn 提出的选项2 大致相同,但我更喜欢它,因为它与API 更清洁。
评论赞赏!