PF6 SelectOneMenu filter is not fired with "Paste" or with "CTRL + Backspace"

79 views Asked by At

Using PrimeFaces 6, I am trying to filter my p:selectOneMenu when the user paste a value or when the user delete a value using CTRL + Backspace, in another word, when the value got changed anyhow.

Please find my below code.

    <p:selectOneMenu id="providerURLDD" widgetVar="providerURLDD"
        value="#{switchProviderBean.selectedProvider}" 
        panelStyle="width:240px" effect="fade" filter="true"
        style="width:240px" filterMatchMode="contains" 
        required="true" 
        requiredMessage="#{msg['selectProvider']}">
      <f:selectItem itemLabel="Select" />
      <f:selectItems value="#{switchProviderBean.providerAccounts}"
         var="providerAcc"
         itemLabel="#{providerAcc.code}-#{providerAcc.switchAccountId}-#{providerAcc.name}"
         itemValue="#{providerAcc.switchAccountId}" />
    </p:selectOneMenu>

I also tried to use Javascript like this:

        function getTextAreaSelection(textarea) {
            var start = textarea.selectionStart,
                end = textarea.selectionEnd;
            return {
                start: start,
                end: end,
                length: end - start,
                text: textarea.value.slice(start, end)
            };
        }
    
    function detectPaste(textarea, callback) {
        textarea.onpaste = function() {
            var sel = getTextAreaSelection(textarea);
            var initialLength = textarea.value.length;
            window.setTimeout(function() {
                var val = textarea.value;
                var pastedTextLength = val.length - (initialLength - sel.length);
                var end = sel.start + pastedTextLength;
                callback({
                    start: sel.start,
                    end: end,
                    length: pastedTextLength,
                    text: val.slice(sel.start, end)
                });
            }, 1);
        };
    }
    
    
    
    var textarea = document.getElementById("switchProviderChoice:providerURLDD_filter");
    detectPaste(textarea, function(pasteInfo) {
        console.log('perform filter');
        PF('providerURLDD').filter();
    }); 
0

There are 0 answers