JavaScript Ванильное двухстороннее связывание - PullRequest
0 голосов
/ 30 июня 2018

Я нашел этот очень короткий, но удобный двухсторонний связывающий код, написанный на чистом JavaScript. Привязка данных работает нормально, но я хочу взять значение из первого ввода, умножить его на желаемое число и связать результат со следующим вводом. Я буду признателен за любую помощь. Это мой HTML код:

<input class="age" type="number">
<input class="age" type="number">

и код JavaScript:

    var $scope = {};
(function () {
    var bindClasses = ["age"];
    var attachEvent = function (classNames) {
        classNames.forEach(function (className) {
            var elements = document.getElementsByClassName(className);
            for (var index in elements) {
                elements[index].onkeyup = function () {
                    for (var index in elements) {
                        elements[index].value = this.value;
                    }
                }
            }
            Object.defineProperty($scope, className, {
                set: function (newValue) {
                    for (var index in elements) {
                        elements[index].value = newValue;
                    }
                }
            });
        });
    };
    attachEvent(bindClasses);
})();

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Другой простой подход к двустороннему связыванию в JS может выглядеть примерно так:

<!-- index.html -->
<form action="#" onsubmit="vm.onSubmit(event, this)">
    <input onchange="vm.username=this.value" type="text" id="Username">
    <input type="submit" id="Submit">
</form>
<script src="vm.js"></script>


// vm.js - vanialla JS
let vm = {
    _username: "",
    get username() {
        return this._username;
    },
    set username(value) {
        this._username = value;
    },
    onSubmit: function (event, element) {
        console.log(this.username);
    }
}

JS Getters и Setters довольно хороши для этого, особенно если посмотреть на поддержку браузера для этого.

0 голосов
/ 30 июня 2018

Если желаемый результат состоит в том, чтобы принять первое входное значение, сделать что-то с ним, поместить его во второй вход, тогда почему так серьезно?

(function () {
  var bindClasses = ["age"];
  var attachEvent = function (classNames) {
    classNames.forEach( function( className ) {
      var els = document.getElementsByClassName( className ),
          from, to;
      if ( 2 > els.length ) {
        return;
      }
      from = els[0];
      to   = els[els.length - 1];

      from.addEventListener( 'keyup', function() {
        var v = this.value;
        // Do whatever you want with that value
        // Then assign it to last el
        if ( isNaN( v ) ) {
          return;
        }
        v = v / 2;
        to.value = v;
      });
    });
  };
  attachEvent(bindClasses);
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...