1. Fabrik 3.9 has been released. If you have updated Joomla to 3.9, this is a required update.
    Dismiss Notice

Change repeatable data based on element

Discussion in 'Community' started by andre00silva, Jun 12, 2018.

Thread Status:
Not open for further replies.
  1. andre00silva

    andre00silva Member

    Level: Community
    Hello. In my list "Pedidos de Or?amento" I have an element called "part_quantity" which basically holds the value that the repeatable group needs to repeat. I've gone to the repeatable group options and in the "Repeat Num Element" I've changed the element to "part_quantity". Everything works fine, the repeatable group repeats... but I've added a validation to the "part_quantity" (in JS) element so that the users can't insert the value "0" or "":

    Code (Javascript):
    requirejs(['fab/fabrik'], function () {
      var formId = 24;
      Fabrik.getBlock('form_' + formId, false, function (block) {
        var field = block.elements.get('fzmms_quotereq___part_quantity');
        valor = field.get('value');
        if (valor === '0' || valor === ''){
          block.elements.get('fzmms_quotereq___part_quantity').set('1');
        }
      });
    });
    This code, basically, checks the element value and, if it is equal to "0" or "", it changes the value to "1". The problem is, when this happens, the times the repeatable group repeats won't change. For example: If I had inserted 2 and changed it to 0, it will automatically change it to 1 and there will still be 2 rows in the repeatable... How can I remove rows of the repeatable group through JS?
     
  2. cheesegrits

    cheesegrits Support Gopher Staff Member

    Level: Community
    You'll need to fire the 'change' event for your repeat num field, which will trigger the code that adds/removes the groups.

    Code (Text):

    requirejs(['fab/fabrik'],function(){
    var formId =24;
      Fabrik.getBlock('form_'+ formId,false,function(block){
        var field = block.elements.get('fzmms_quotereq___part_quantity');
        valor = field.getValue();
        if(valor ==='0'|| valor ===''){
           field.update('1');
           field.element.fireEvent('change', new Event.Mock(field.element, 'change');
        }
      });
    });
     
    Note that depending on the element type, you might need to use 'blur' rather than 'change', or you could use the getChangeEvent() function for the element, which returns whatever is appropriate for the element type ...

    Code (Text):

         field.element.fireEvent(field.getChangeEvent(), new Event.Mock(field.element, field.getChangeEvent());
     
    Note that I think your code will only run on page load, you'd need to add it as a 'change' JS event in the element itself to get it to run when the user changes the value.

    -- hugh
     
  3. andre00silva

    andre00silva Member

    Level: Community
    Thanks for the quick reply! What is the code to remove the groups?
     
  4. cheesegrits

    cheesegrits Support Gopher Staff Member

    Level: Community
    You don't need it. If you fire the change event on your "repeat num" element, Fabrik will automatically add/remove groups, based on the value of the element (as if you had manually entered a value).

    -- hugh
     
  5. andre00silva

    andre00silva Member

    Level: Community
    Works as a charm, thanks!
     
Thread Status:
Not open for further replies.

Share This Page