переменная onchange javascript - PullRequest
4 голосов
/ 12 октября 2009

Есть ли способ вызвать функцию javascript, если переменная javascript изменяет значения с помощью jQuery?

Что-то в пределах -

var test = 1;
test = 2; // calls a javascript function
test = 3; // calls a javascript function

Таким образом, мне не нужно было бы добавлять событие onchange ко многим различным функциям.

Ответы [ 6 ]

16 голосов
/ 12 октября 2009

(Что-то кажется немного небрежно спланированным в вашем коде, если вам нужна подобная функциональность)

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

Вместо:

var test = 1;
test = 2; // calls a javascript function
test = 3; // calls a javascript function

Вы делаете:

var test = 1;

function set_test(newval) {
  test = newval;
  my_callback(); // this is whatever you wanted to call onChange
}

set_test(2);
set_test(3);
3 голосов
/ 17 июня 2015

попробуйте, это реальное событие изменения переменной:

var book = {
    _year: 2004,
    edition: 1
};
Object.defineProperty(book, "year", {
    get: function(){
        return this._year;
    },
    set: function(newValue){
        this._year=newValue;
        this.edition=newValue-2004;
        alert(this._year);
        alert(this.edition);
    }
});

book.year=2017
// will alert 2017 and 13
2 голосов
/ 20 января 2012

Это не дает точного ответа на ваш вопрос, но может решить вашу проблему: сделайте вашу переменную html-содержимым элемента, затем используйте событие jQuery change ()

<script>
document.write("<div id='test'>"+test+"</div>";
$("#test").change(function(){//your script here});
</script>
2 голосов
/ 12 октября 2009

Нет, нет, просто опрос с setInterval или setTimeout или обратными вызовами. События относятся только к DOM. Я бы посоветовал вам попытаться использовать обратные вызовы и делать такие вещи:

function foo(data, callback)
{
    // do things with data
    callback(data);
}

function bar(data)
{
    console.log('callback can has', data);
}

foo('baz', bar);

Это грубый пример, но он должен дать вам идею.

1 голос
/ 12 октября 2009

Один из вариантов - обернуть ваши данные в более тяжелый объект.

var Watching = function(){
    var a;

    this.getA(){
        return a;
    };

    this.setA(value){
        a = value;
        this.trigger('watch');
    };

    his.watchA(callback){
        this.bind('watch', callback);
    };
};

var obj = new Watching();
obj.watchA(function(){ alert('changed'); });
obj.setA(2);
0 голосов
/ 12 октября 2009
The below function will poll for changes in the test variable every 5 seconds:

// initialize test variable globally
var test = 1;

// global variable to store the previous value of test
// which is updated every 5 seconds
var tmp = test;

setInterval("pollForVariableChange()", 5000);

function pollForVariableChange() {
    if (tmp != test) {
        alert('Value of test has changed to ' + test);
    }
    tmp = test;
}
...