• Jump To … +
    <<< back to documentation base.js constraint.js defaults.js factory.js field.js form.js main.js multiple.js pubsub.js remote.js ui.js utils.js validator.js validator_registry.js
  • multiple.js

  • ¶
    import $ from 'jquery';
    import Utils from './utils';
    
    var Multiple = function () {
      this.__class__ = 'FieldMultiple';
    };
    
    Multiple.prototype = {
  • ¶

    Add new $element sibling for multiple field

      addElement: function ($element) {
        this.$elements.push($element);
    
        return this;
      },
  • ¶

    See Field._refreshConstraints()

      _refreshConstraints: function () {
        var fieldConstraints;
    
        this.constraints = [];
  • ¶

    Select multiple special treatment

        if (this.element.nodeName === 'SELECT') {
          this.actualizeOptions()._bindConstraints();
    
          return this;
        }
  • ¶

    Gather all constraints for each input in the multiple group

        for (var i = 0; i < this.$elements.length; i++) {
  • ¶

    Check if element have not been dynamically removed since last binding

          if (!$('html').has(this.$elements[i]).length) {
            this.$elements.splice(i, 1);
            continue;
          }
    
          fieldConstraints = this.$elements[i].data('FieldMultiple')._refreshConstraints().constraints;
    
          for (var j = 0; j < fieldConstraints.length; j++)
            this.addConstraint(fieldConstraints[j].name, fieldConstraints[j].requirements, fieldConstraints[j].priority, fieldConstraints[j].isDomConstraint);
        }
    
        return this;
      },
  • ¶

    See Field.getValue()

      getValue: function () {
  • ¶

    Value could be overriden in DOM

        if ('function' === typeof this.options.value)
          return this.options.value(this);
        else if ('undefined' !== typeof this.options.value)
          return this.options.value;
  • ¶

    Radio input case

        if (this.element.nodeName === 'INPUT') {
          var type = Utils.getType(this.element);
          if (type === 'radio')
            return this._findRelated().filter(':checked').val() || '';
  • ¶

    checkbox input case

          if (type === 'checkbox') {
            var values = [];
    
            this._findRelated().filter(':checked').each(function () {
              values.push($(this).val());
            });
    
            return values;
          }
        }
  • ¶

    Select multiple case

        if (this.element.nodeName === 'SELECT' && null === this.$element.val())
          return [];
  • ¶

    Default case that should never happen

        return this.$element.val();
      },
    
      _init: function () {
        this.$elements = [this.$element];
    
        return this;
      }
    };
    
    export default Multiple;