如果变量发生变化,则触发事件

时间:2017-12-28 15:16:46

标签: javascript jquery html

我目前有一个显示DNS和IP地址等信息的div。

我试图在IP地址变量发生变化时触发警报,所以我试图在没有太多运气的情况下同时监听div的变化和变量本身。如果变量发生变化,是否有明显的方法来警告或触发函数?

 $(ipv4.ipaddr).change(function() {
        alert("IP Changed");
    }); 

用于正常显示IP地址的脚本:

if(result.ipv4){
    $("#btn-disconnect").show();
    $("#btn-disconnect-modem").show();
    var ipv4=result.ipv4;
    html+="<tr><td>IPAddr</td><td>"+ ipv4.ipaddr+"</td></tr>";
    if(ipv4.netmask) html+="<tr><td>Netmask</td><td>"+ ipv4.netmask+"</td></tr>";
    if(ipv4.gateway) html+="<tr><td>Gateway</td><td>"+ ipv4.gateway+"</td></tr>";
    label_dns="DNS";
    for(var i=0;i<ipv4.dns.length;i++){
        html+="<tr><td>"+label_dns+"</td><td>"+ ipv4.dns[i] +"</td></tr>";
        label_dns="";
    }
    if(proto=="wwan" || proto=="tethering"||proto=="3g"){
        if(result.tx) html+="<tr><td>TX Data</td><td>"+(result.tx/1024/1024>1? ((result.tx/1024/1024).toFixed(2)+" MB"): ((result.tx/1024).toFixed(2) +" KB") )+" </td></tr>";
        if(result.rx) html+="<tr><td>RX Data</td><td>"+(result.rx/1024/1024>1? ((result.rx/1024/1024).toFixed(2)+" MB"): ((result.rx/1024).toFixed(2) +" KB") )+"</td></tr>";
    }
    if(typeof sta_connected === "function") sta_connected();

}else{
    if( (proto=="wwan" ||proto=="tethering")){
        if(!result.disabled) html+="<tr><td>Connecting to the Internet</td></tr>";
    }
    if(proto=="wisp" ||proto=="wds"){
        if(!result.disabled) html+="<tr><td>Connecting to the Internet</td></tr>";
        result.disabled? $("#btn-disconnect").hide():$("#btn-disconnect").show();
    }
}
$(section).html(html);
}

2 个答案:

答案 0 :(得分:0)

我需要html给出一个更好的答案,但我给你的这个已经有效!我想你使用jQuery,你必须知道什么时候你要检查ip,我的意思是你可以做到总是在身上放一个onclick方法(不推荐),或者你可以在用户按下你的任何可用的提交按钮时这样做形式(我将解释这一个)。看看这个:

<script>

if($("input=[type=submit]").on('click',function(){

  var lastip=document.getElementById("ip").value;
  $.post("yourfile.php", { lastip: lastip }, function(data){
    $("#yourdiv").html(data);
  });

 });

</script>

yourfile.php

   function user_ip() {
        $ip = '';
        if (getenv('HTTP_CLIENT_IP'))
            $ip = getenv('HTTP_CLIENT_IP');
        else if(getenv('HTTP_X_FORWARDED_FOR'))
            $ip = getenv('HTTP_X_FORWARDED_FOR');
        else if(getenv('HTTP_X_FORWARDED'))
            $ip = getenv('HTTP_X_FORWARDED');
        else if(getenv('HTTP_FORWARDED_FOR'))
            $ip = getenv('HTTP_FORWARDED_FOR');
        else if(getenv('HTTP_FORWARDED'))
           $ip = getenv('HTTP_FORWARDED');
        else if(getenv('REMOTE_ADDR'))
            $ip = getenv('REMOTE_ADDR');
        else
            $ip = 'Not Available';
        return $ip;
    }

$lastip= $_POST['lastip'];
$nowip= user_ip();

if($nowip!=$lastip AND !empty($lastip)){

echo 'ip changed!';
exit();

}

 <div id="yourdiv">
    <table>
      <tr>
        <td id="ip">IP:<?php echo $nowip;?></td>
        <td id="dns">DNS:</td>
      </tr>
    </table>
 </div>

答案 1 :(得分:0)

如下:

$(function() {
  var ipAddress = ipv4.ipaddr
  setInterval(() => {
    if (ipAddress !== ipv4.ipaddr) {
      var ipAddress = ipv4.ipaddr
      alert('IP Has Changed!')
    }
  }, 1000)
});

这会在页面加载时将当前IP地址存储在ipAddress,然后每隔一秒检查一次,以确保它与当前ipv4.ipaddr相同,如果它不是 - 提高警报,保存新值,以便再次进行检查。

注意:这假设您在某处自动填充ipv4.ipaddr