Как я могу контролировать значение скрытого элемента ввода? - PullRequest
2 голосов
/ 28 апреля 2009

У меня есть элемент SELECT, который добавляет свое значение к скрытому ВХОДУ через Javascript каждый раз, когда нажимается OPTION (вместе с визуальным представлением каждого выбора), и я хотел бы иметь возможность отслеживать изменения для другой функции Javascript. Ради модульности я не могу интегрировать вторую функцию в первую. Я также предпочел бы не опрашивать значение скрытого INPUT, чтобы избежать хаков. В настоящее время я использую событие onclick в DIV, которое содержит как SELECT, так и скрытый INPUT, но это также довольно хакерский подход. Знаете ли вы, как отслеживать скрытый элемент INPUT на предмет изменений?

1 Ответ

3 голосов
/ 28 апреля 2009

Итак, у вас есть:

  • Функция A, которая обновляет скрытый ВХОД.
  • Функция B, которая должна вызываться при обновлении INPUT.

Почему бы не создать свое собственное "событие", которое эта функция A вызывает / отправляет всякий раз, когда она работает?

Я полагаю, что большинство Javascript-фреймворков довольно легко поддерживают концепцию пользовательских событий, но это всего лишь серия вызовов функций.

Например, создайте некоторый объект D, который представляет диспетчер для одного события. Да, это глупо, но я пытаюсь сделать концепцию простой. Этот объект D содержит список функций, которые «зарегистрировались» для своего события, и когда событие отправляется, он вызывает эти функции.

Что-то вроде:

var d = (function() {
    var funcs = [];

    function fire() {
        for (var i=0; i<funcs.length; ++i) {
          funcs[i].call();
        }
    }

    function register(newfunc) {
        funcs.push(newfunc);
    }    

    return {
        fire: fire,
        register: register
    };
})();

Вам осталось сделать только две вещи - сделать функцию A запускающей событие:

function A() {

    // do stuff to update the INPUT

    d.fire();
}

, а также, onload, «зарегистрировать» функцию B, вызываемую при возникновении события:

d.register(B);

Этот подход поддерживает принцип разделения модулей (или как бы он ни назывался), поскольку A и B ничего не знают друг о друге и должны знать только о третьем объекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...