6

如果 javascript 变量使用 jQuery 更改值,有没有办法调用 JavaScript 函数?

某种程度的——

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

这样我就不必为这么多不同的函数添加 onchange 事件。

4

8 回答 8

21

(如果您需要这样的功能,您的代码中似乎有些粗心的计划)

添加该功能的最简单方法是创建一个用于更新变量的函数,该函数还调用您想要的任何其他函数。

代替:

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);
于 2009-10-12T16:28:10.907 回答
6

试试这个,它是真正的变量更改事件:

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
于 2015-06-17T14:06:10.697 回答
2

不,没有,只是使用setIntervalorsetTimeout或回调进行轮询。事件仅适用于 DOM。我建议您尝试使用回调并执行以下操作:

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

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

foo('baz', bar);

这是一个粗略的例子,但应该给你的想法。

于 2009-10-12T16:22:17.047 回答
1

这不能完全回答您的问题,但它可能会解决您的问题:将您的变量作为元素的 html 内容,然后使用 jQuery change() 事件

<script>
document.write("<div id='test'>"+test+"</div>";
$("#test").change(function(){//your script here});
</script>
于 2012-01-19T23:23:38.257 回答
1

一种选择是将数据包装到更重的对象中。

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);
于 2009-10-12T16:30:36.813 回答
0

您可以通过设置间隔来执行类似的操作以跟踪更改:

var dataToChange = 1;
var key = dataToChange;
var int = setInterval(() => {
    if (dataToChange != key) {
        console.log('changed'); /// if data changes
        clearInterval(int);
    } else {
        console.log('nothing changed'); /// while nothing changes
    }
}, 3000);
setTimeout(() => {
    ///// supposedly this is when the variable changes
    dataToChange = 2;
}, 9000);
于 2021-04-16T13:47:50.857 回答
0

您可以创建一个类,以便在您的变量更改时收到通知。这是课程:

class ListeningVariable {
    constructor(val, changeHandler) {
        this.val = val;
        this.changeHandler = changeHandler
    }
    set value(val) {
        if (this.val !== val) {
            this.changeHandler(val);
        }
        this.val = val;
    }
    changeHandler(val) {}
}

然后你可以创建这个类的一个实例而不是你的变量:

let myVar = new ListeningVariable(25/*initialize*/, function(val) {
    console.log("variable Changed to:", val);
}/*handler function*/);

当您想更改变量时,只需使用以下代码:

myVar.value = 20; // calls the changeHandler function
myVar.value = 20; // does't call the changeHandler function
myVar.value = 40; // calls the changeHandler function
于 2020-02-23T11:02:06.450 回答
-1
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;
}
于 2009-10-12T16:30:09.870 回答