- 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;