如果 javascript 变量使用 jQuery 更改值,有没有办法调用 JavaScript 函数?
某种程度的——
var test = 1;
test = 2; // calls a javascript function
test = 3; // calls a javascript function
这样我就不必为这么多不同的函数添加 onchange 事件。
如果 javascript 变量使用 jQuery 更改值,有没有办法调用 JavaScript 函数?
某种程度的——
var test = 1;
test = 2; // calls a javascript function
test = 3; // calls a javascript function
这样我就不必为这么多不同的函数添加 onchange 事件。
(如果您需要这样的功能,您的代码中似乎有些粗心的计划)
添加该功能的最简单方法是创建一个用于更新变量的函数,该函数还调用您想要的任何其他函数。
代替:
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);
试试这个,它是真正的变量更改事件:
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
不,没有,只是使用setInterval
orsetTimeout
或回调进行轮询。事件仅适用于 DOM。我建议您尝试使用回调并执行以下操作:
function foo(data, callback)
{
// do things with data
callback(data);
}
function bar(data)
{
console.log('callback can has', data);
}
foo('baz', bar);
这是一个粗略的例子,但应该给你的想法。
这不能完全回答您的问题,但它可能会解决您的问题:将您的变量作为元素的 html 内容,然后使用 jQuery change() 事件
<script>
document.write("<div id='test'>"+test+"</div>";
$("#test").change(function(){//your script here});
</script>
一种选择是将数据包装到更重的对象中。
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);
您可以通过设置间隔来执行类似的操作以跟踪更改:
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);
您可以创建一个类,以便在您的变量更改时收到通知。这是课程:
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
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;
}