Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多次调用Javascript函数时,该函数不起作用_Javascript_Jquery_Function - Fatal编程技术网

多次调用Javascript函数时,该函数不起作用

多次调用Javascript函数时,该函数不起作用,javascript,jquery,function,Javascript,Jquery,Function,我正在创建一个检查0或1的id值的函数。此功能用于执行以下任务(触发SMS功能): 1) 如果页面加载时,任何id的值为1(真),此函数将不允许此id的sms触发器,但如果值变为0(假)并再次返回1(真),则将触发sms函数 2) 如果在页面加载时,id的值为0(false),如果其值随时更改为1(true),此函数将允许SMS触发 注意:当我分别用value1或value2或value3检查此功能时,它工作正常。但是当我为多个ID执行这个函数时,比如onloadcheck(value1);空载

我正在创建一个检查0或1的id值的函数。此功能用于执行以下任务(触发SMS功能):

1) 如果页面加载时,任何id的值为1(真),此函数将不允许此id的sms触发器,但如果值变为0(假)并再次返回1(真),则将触发sms函数

2) 如果在页面加载时,id的值为0(false),如果其值随时更改为1(true),此函数将允许SMS触发

注意:当我分别用
value1
value2
value3
检查此功能时,它工作正常。但是当我为多个ID执行这个函数时,比如
onloadcheck(value1);空载检查(值2)它会产生问题。没有错误,但工作方式不正确

请帮帮我。多谢各位

$(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>

测试短信
测试SMS触发器


之所以很难做到这一点,是因为您需要获取它们的当前值,并将其与以前的值进行比较。因此,要做到这一点,您需要始终存储其先前值的副本

在我的示例中,我将它们以前的值的副本存储在一个对象中,然后每次更新时,我从我的对象中获取旧值,从元素中获取新值,并比较两者。然后别忘了在对象中保存新值

1

0

0

更新及;重新检查值 //缓存DOM元素以供快速参考 var demo1=$(“#demo1”); var demo2=$(“#demo2”); var demo3=$(“#demo3”); //将其当前值存储在对象中 //这就是我们今后将如何参考他们以前的价值观 存储的变量值={ demo1:demo1.text(), demo2:demo2.text(), demo3:demo3.text() }; //循环遍历所有元素 //从.text()获取其当前值 //从我们上面制作的对象中获取它们以前的值 //使用我们的自定义比较函数比较值(定义如下) //最后,将当前值保存到对象中 函数checkValues(){ [demo1,demo2,demo3]。forEach(功能(项){ var element_id=item.attr('id'); var currentValue=item.text(); var previousValue=存储的值[元素id]; 比较值(currentValue、previousValue、element_id); 存储的\u值[元素\u id]=当前值; }); } //比较传入的值,并确定要执行的操作 函数compareValues(当前、以前、elementID){ 如果(上一个==0和当前==1){ 警报('为'+elementID+'发送短信!!!); }否则{ return;//什么也不做 } } //点击按钮 //分配新值,然后选择checkValue() $(“按钮”)。单击(函数(){ $('p')。每个(函数(索引,元素){ var number=Math.round(Math.random()); $(元素)。文本(数字); }); 校验值(); });
请正确缩进您的代码。
如果(x==1&&enablesms){
您的意思是
enablesms
转到这里吗?因为我在您的代码中没有看到
enablesms
是的。我在发布之前忘记了更新。定义“不工作”、“产生问题”和“不以正确的方式工作”结果与你的期望有什么不同?很抱歉你的英语很糟糕,你觉得很难理解。TJBlackman给出了为我工作的解决方案
<p id="demo1">1</p>
<p id="demo2">0</p>
<p id="demo3">0</p>

<button type="button">Update &amp; 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>