7
« on: November 19, 2024, 11:59:46 pm »
I had a listener that previously worked. The idea of the listener is that the filter starts either when the [ENTER] key is pressed or the timeout happens. v10.0.0 and below worked fine, v10.0.1 now has an issue, in that every keypress, the filter starts due to the timeout.
If I comment out the "timeout", it works fine except the timeout is never triggered. If I include the timeout, it goes all wrong.
Ideally I would like to avoid using the "do_filter" function and just use the default filter start trigger, but I don't know how to call that.
var text_listener = {
"keydown": function(e, ui)
{
if(e.key==="Enter")
do_filter(ui);
},
// If I comment out below for v10.0.1 there are no wrong filter triggers
"timeout": function(e, ui){
do_filter(ui);
}
};
function do_filter(ui)
{
var rule = { condition: ui.column.filter.crules[0].condition, dataIndx: ui.column.dataIndx, value: ui.value, value2: ui.value2 },
CM = $("#grid").pqGrid("getColModel");
// Check if the filter is not already applied
for(var i=0, len = CM.length; i < len; i++){
// If there is no change
if( CM[i]["dataIndx"]===ui.column.dataIndx && ui.value===CM[i]["filter"]["crules"][0]["value"] && ui.value2===CM[i]["filter"]["crules"][0]["value2"] )
rule = null;
}
// If we have a rule, apply it
if(rule)
$("#grid").pqGrid("filter", {
oper: "add",
rules: [
rule
]
});
}
...
columnModel = [
{dataIndx:"NAME", title:"NAME", filter:{crules:[{condition:"contain"}], style:"text-align:"+dir, listener:text_listener}},
...
];
Doing a console log I found the bug. The timeout in the listener is getting the "keydown" event and not getting the "timeout" event. I commented out the "keydown" listener and timeout worked.
I tried below, but either keydown or timeout get missed:
var text_listener = {
"keydown": function(e, ui)
{
if(e.type==="keydown" && e.key==="Enter")
do_filter(ui);
},
// If I comment out below for v10.0.1 there are no wrong filter triggers
"timeout": function(e, ui){
if(e.type==="timeout")
do_filter(ui);
}
};
I shouldn't have to test for the event as that function should never be called for a different event.