javascript - 当值超过数字时在浏览器中心弹出警告
问题描述
我有一个页面拉 SNMP 数据(使用 php),然后通过 HTML 和颜色编码值显示它。当值超过特定数字时,我想添加一个弹出警报。
我尝试了各种 jquery 选项来实现这一点,但它不起作用。
PHP部分获取值:
<?php
$valueis = snmp2_get("IPADDRESS", "public", ".1.3.6.1.4.1.476.1.42", 1000000, 0);
?>
HTML部分:
<html>
<meta HTTP-EQUIV="REFRESH" content="20">
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#table_fid td.mynumber').each(function(){
if ($(this).text() <= '16' ) {
$(this).addClass('blue');
}
if ($(this).text() > '16' ) {
$(this).addClass('green');
}
});
});
<DIV style="position: absolute; top:10px; left:10px; width:10px; height:10px"><table id="table_fid">
<td class="mynumber"><a href=http://mywebsite.com><?php echo $valueis?></a></td></tr>
</table></DIV>
这很好用。
但是我希望当值高于 16 时,它还会在浏览器中显示一个弹出窗口作为警报。我试图在此页面中合并指南以自动触发,但没有运气:https ://html-online.com/articles/simple-popup-box/ 。这个页面中的弹出窗口正是我希望我的样子。
解决方案
此解决方案适用于支持 rgba() 的现代浏览器。较旧的浏览器需要一些更高级的 CSS。
理想情况下,您应该通过 AJAX 访问 PHP 值,但您可以在 JS 部分对 PHP 值进行硬编码以使事情变得更容易,然后将值插入到 DOM 对象中 ( td.mynumber
)。
您的示例仅显示一行数据......但考虑到您使用了 $.each() 迭代器,您可能正在简化多行的解决方案?
对于单行:
<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.js"></script>
<script>
//first assign the PHP value
var the_value = <?php echo $valueis?>; //notice NO quotes! because this is numeric!
//now you can use 'the_value' instead of reading from the DOM object
$(document).ready(function(){
$('#table_fid td.mynumber').each(function(){
//assign the_value to the DOM object
$(this).children().text(the_value);
//add classes based on the_value
if (the_value <= 16 ) {//the_value is NUMERIC - no quotes!
$(this).addClass('blue');
}
else {//you don't need another 'if' here, value must be higher than 16
$(this).addClass('green');
//show overlay
$('#overlay').show()// changes display: none to block
}
});
});
function closeOverlay () {
$('#overlay').hide()// changes display: block to none
}
</script>
<style>
*,*:before,*:after{/*best practice, reset box-sizing to include borders and padding in width!*/
box-sizing: border-box;
}
body{/*best practice, reset body container values*/
margin: 0;
padding: 0;
}
#table-container{
position: absolute;
top:10px;
left:10px;
width:10px;
height:10px;
z-index: 1; /*Make this render as the bottom layer*/
}
#overlay{
display: none; /* default state hidden */
position: fixed; /* does not move */
top: 0;/* place at top */
left: 0;/*place at left */
height: 100%;/* full height of container */
width: 100%;/* full width of container */
background: rgba(0,0,0,0.5);/* semi-transparent black background */
z-index: 2;/*Make this render ABOVE the bottom layer, because 2 is greater than 1!*/
}
#overlay-x{
height: 32px;
width: 32px;
border-radius: 16px;/*border-radius of HALF height makes this a circle!*/
display: block;
font-family: Arial;
background: white;
line-height: 26px;
font-size: 15px;
font-weight: bold;
text-align: center;
border: 3px solid #ccc;
/* now position this white circle */
position: absolute;/* absolutely positioned */
top: 0; /*place at top */
right: 0;/*place at right*/
margin-top: -10px;/*pull UP 10px*/
margin-right: -10px;/*pull RIGHT 10px*/
cursor: pointer;/*show pointer on hover to make it LOOK clickable*/
}
/* fixed-size */
#overlay-message-container{
width: 300px;
height: 200px;
background: white;
text-align: center;
/* this is how you center position fixed-size */
position: absolute;/* absolutely positioned */
top: 50%; /* place in absolute center of container height */
left: 50%;/* place in absolute center of container width */
margin-top: -100px; /* pull exactly HALF of the HEIGHT UPward*/
margin-left: -150px; /* pull exactly HALF of the WIDTH LEFTward*/
padding: 80px 10px;
box-shadow: 0 0 30px 10px rgba(0,0,0,0.25);/*drop shadow effect*/
}
</style>
</head>
<body>
<div id="table-container"><!--moved styles to HEAD-->
<table id="table_fid">
<tr>
<td class="mynumber"><a href="http://mywebsite.com"><!--don't need PHP here, value is assigned by JS!--></a></td>
</tr>
</table>
</div>
<div id="overlay"><!--the overlay-->
<div id="overlay-message-container"><!--the message container-->
<div id="overlay-x" onclick="closeOverlay()">X</div><!--the X to close the window-->
<div id="overlay-message">This is the message inside the overlay!</div>
</div>
</div>
</body>
</html>
如果要打印多行,则需要分配一个 JS 值数组:
<script>
//first assign the PHP values - assuming 4 values
var the_values = [
<?php echo $valueis_1?>, //this is a list of value, use commas
<?php echo $valueis_2?>,
<?php echo $valueis_3?>,
<?php echo $valueis_4?>
]
//now you can use the_values instead of reading from the DOM object
//Note: $.each() is passed an 'index' value which returns the current loop iteration; you can use this to assign array values
$(document).ready(function(){
$('#table_fid td.mynumber').each(function(index){//note 'index'!
//assign the_value to the DOM object
$(this).text(the_values[index]);
//add classes based on the_values[index]
if (the_values[index] <= 16 ) {//the_values[index] is NUMERIC - no quotes!
$(this).addClass('blue');
}
else {//you don't need another 'if' here, value must be higher than 16
$(this).addClass('green');
//show overlay - doesn't matter if it's already showing!
$('#overlay-message').show()
}
});
});
</script>
然后在您的 HTML 中,您需要添加 4 行:
<div id="table-container"><!--moved styles to HEAD-->
<table id="table_fid">
<tr>
<td class="mynumber"><a href="http://mywebsite.com"><!--don't need PHP here, value is assigned by JS!--></a></td>
</tr>
<tr>
<td class="mynumber"><a href="http://mywebsite.com"><!--don't need PHP here, value is assigned by JS!--></a></td>
</tr>
<tr>
<td class="mynumber"><a href="http://mywebsite.com"><!--don't need PHP here, value is assigned by JS!--></a></td>
</tr>
<tr>
<td class="mynumber"><a href="http://mywebsite.com"><!--don't need PHP here, value is assigned by JS!--></a></td>
</tr>
</table>
</div>
证明在这里: https ://codepen.io/remedio/pen/pozbdLY
这是 FIXED-SIZE 容器的简化答案。您可以使用伪元素和内联块来做一些很酷的事情,以使动态大小的元素居中......
推荐阅读
- mercurial - 提交时出现 Mercurial 错误:“中止:phases.new-commit: not a valid phase name ('')”
- spring - 将多个属性值注入多个 bean
- swift - 在 Google 地图上显示多个“GMSMarker”标记
- c++ - 不可预知的嵌套循环数
- c++ - STL __stl_hash_string
- sql - 在 SQL Server 中提取 2 个独立查询,然后合并为一个子查询
- jquery - Html - 视频海报问题
- java - E/AndroidRuntime: FATAL EXCEPTION: main (当点击按钮时应用程序崩溃)
- tfs - TFS CD 错误:指定的路径、文件名或两者都太长。
- c - 在 C 中使用循环和函数的基本错误