Change repeatable data based on element

Status
Not open for further replies.
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 "":

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?
 
You'll need to fire the 'change' event for your repeat num field, which will trigger the code that adds/removes the groups.

Code:
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:
     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
 
You'll need to fire the 'change' event for your repeat num field, which will trigger the code that adds/removes the groups.

Code:
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:
     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
Thanks for the quick reply! What is the code to remove the groups?
 
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
 
Status
Not open for further replies.
We are in need of some funding.
More details.

Thank you.

Members online

No members online now.
Back
Top