我正在创建一个函数来检查 id 值是否为 0 或 1。该函数用于执行以下任务(触发 SMS 函数):
1) 如果在页面加载时,任何 id 的值为 1(true),此函数将不允许该 id 触发短信,但如果值变为 0(false) 并再次返回到 1(true),它将触发短信功能。
2) 如果在页面加载时,id 的值为 0(false),则只要其值随时更改为 1 (true),此函数将允许短信触发。
注意:当我分别使用 value1
或 value2
或 value3
检查此函数时,它工作正常。但是当我为多个 id 执行此函数时,例如 onloadcheck(value1); onloadcheck(value2);
它会产生问题。没有错误,但无法正常工作。
请帮助我。谢谢。
$(document).ready(function() {
setInterval(function() {
rand_val();
}, 1000);
});
//check initial values of all ids
var onloadcheck = (function() {
var executed = false;
var enableit = false;
return function(x) {
if (!executed) {
executed = true;
if(x==1){enableit = false;}
if(x==0){enableit = true;}
}
if(x==1 && enableit ){
console.log("Sending SMS");
enableit = false;
}
if(x==0 ){
enableit = true;
}
};
})();
//generates random values
function rand_val(){
document.getElementById("demo1").innerHTML =
Math.floor(Math.random() * 2);
var value1= $("#demo1").text();
document.getElementById("demo2").innerHTML =
Math.floor(Math.random() * 2);
var value2= $("#demo2").text();
document.getElementById("demo3").innerHTML =
Math.floor(Math.random() * 2);
var value3= $("#demo3").text();
onloadcheck(value1);
onloadcheck(value2);
}
这是 HTML 代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test SMS</title>
<style>
</style>
</head>
<body>
<p>Test SMS Triggers</p>
<p id="demo1"></p>
<p id="demo2"></p>
<p id="demo3"></p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="index.js"></script>
</body>
</html>
最佳答案
这很困难的原因是您需要获取它们的当前值并将其与之前的值进行比较。因此,要做到这一点,您需要始终存储其先前值的副本。
在我的示例中,我将其先前值的副本存储在一个对象中,然后每次更新时,我都会从对象中获取旧值,从元素中获取新值,然后比较两者。然后不要忘记将新值保存在您的对象中!!
<p id="demo1">1</p>
<p id="demo2">0</p>
<p id="demo3">0</p>
<button type="button">Update & Re-Check Values</button>
<script>
// cache DOM elements for quick reference
var demo1 = $('#demo1');
var demo2 = $('#demo2');
var demo3 = $('#demo3');
// store their current values in object
// this is how we will reference their previous values in the future
var stored_values = {
demo1: demo1.text(),
demo2: demo2.text(),
demo3: demo3.text()
};
// loop through all elements
// get their current value from .text()
// get their PREVIOUS value from the object we made above
// compare values with our custom compare function (define below)
// finally, save the current value in our object
function checkValues(){
[demo1, demo2, demo3].forEach(function(item){
var element_id = item.attr('id');
var currentValue = item.text();
var previousValue = stored_values[element_id];
compareValues(currentValue, previousValue, element_id);
stored_values[element_id] = currentValue;
});
}
// compare values passed in, and determine what to do
function compareValues(current, previous, elementID){
if (previous == 0 && current == 1){
alert('Sending SMS for '+ elementID + '!!!');
} else {
return; // do nothing
}
}
// on button click
// assign new value, then checkValue()
$('button').click(function(){
$('p').each(function(index, element){
var number = Math.round(Math.random());
$(element).text(number);
});
checkValues();
});
</script>
关于多次调用时 Javascript 函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49972026/