如何消除默认选项值对JS判定的影响

胖作家 2021-04-26 05:05:07
我在JSP中设置了数个下拉列表框,每一个选项都有Value,默认为零,我希望两个频道的值不能完全相同,相同会弹出警告框,举个例子,程序中的CH1和CH2可以是“RGDM1 101700”和“RGDM1 102450”,但不能同时为“RGDM1 102450”,这一点可以判断,但我希望消除默认值0的影响,代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ page import="java.io.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title>UE2020 Web Server Interface</title>
<meta name="keywords" content="UP2020 Industrial equipment control" />
<meta name="description" content="UP2020 Industrial equipment control" />

<link rel="stylesheet" type="text/css" href="vendor/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="fonts/font-awesome-4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="fonts/iconic/css/material-design-iconic-font.min.css">
<link rel="stylesheet" type="text/css" href="css/util.css">
<link rel="stylesheet" type="text/css" href="css/Intf.css">
</head>
<body>
<div class="top">
<font color="orange" size="5">
PSBC2020
</font>

</div>
<form>
<div class="box3">
<table class="tb">
<tr>
<th> </th>
<th>LED</th>
<th>IOA</th>
<th>Description</th>
</tr>
<tr>
<th>CH1</th>
<td> <select id="LED1" class="CD" onchange="check()">
<option value="0"> </option>
<option value="1">RGDM1</option>
<option value="2" >RGDM2</option>
</select></td>
<td><select id="IOA1" class="CD" onchange="check()">
<option value="0"> </option>
<option value="1">101700</option>
<option value="2" >102450</option>
</select> </td>
<td></td>
</tr>
<tr>
<th>CH2</th>
<td> <select id="LED2" class="CD" onchange="check()">
<option value="0"> </option>
<option value="1">RGDM1</option>
<option value="2" >RGDM2</option>
</select></td>
<td> <select id="IOA2" class="CD" onchange="check()">
<option value="0"> </option>
<option value="1">101700</option>
<option value="2" >102450</option>
</select> </td>
<td></td>
</tr>
<tr>
<th>CH3</th>
<td> <select id="LED3" class="CD" onchange="check()">
<option value="0"> </option>
<option value="1">RGDM1</option>
<option value="2" >RGDM2</option>
</select></td>
<td><select id="IOA3" class="CD" onchange="check()">
<option value="0"> </option>
<option value="1">101700</option>
<option value="2" >102450</option>
</select> </td>
<td></td>
</tr>
<tr>
<th>CH4</th>
<td> <select id="LED4" class="CD" onchange="check()">
<option value="0"> </option>
<option value="1">RGDM1</option>
<option value="2" >RGDM2</option>
</select></td>
<td><select id="IOA4" class="CD" onchange="check()">
<option value="0"> </option>
<option value="1">101700</option>
<option value="2" >102450</option>
</select> </td>
<td></td>
</tr>
</table>
<input type="reset" name="reset" class="check" value="Reset" style="width:100px;height:40px;float:left;"
onmouseover="this.style.backgroundColor = '#6f6f6f';" onmouseout="this.style.backgroundColor = '';"/>
<input type="submit" name="submit" class="check" value="Submit" style="width:100px;height:40px;float:right;"
onmouseover="this.style.backgroundColor = '#6f6f6f';" onmouseout="this.style.backgroundColor = '';"/>
</div>
</form>
</body>
<script type="text/javascript">
function check() {
var LED1 = document.getElementById("LED1").value;
var LED2 = document.getElementById("LED2").value;
var LED3 = document.getElementById("LED3").value;
var LED4 = document.getElementById("LED4").value;
var IOA1 = document.getElementById("IOA1").value;
var IOA2 = document.getElementById("IOA2").value;
var IOA3 = document.getElementById("IOA3").value;
var IOA4 = document.getElementById("IOA4").value;

if (LED1 === LED2 || LED1 === LED3 || LED1 === LED4 || LED2 === LED3 || LED2 === LED4 || LED3 === LED4) {
if (IOA1 === IOA2 || IOA1 === IOA3 || IOA1 === IOA4 || IOA2 === IOA3 || IOA2 === IOA4 || IOA3 === IOA4) {
alert("There is no same input value for diffrent channel! ");
}
}
}

</script>
<script src="vendor/jquery/jquery-3.2.1.min.js"></script>
<script src="js/main.js"></script>
</html>


求高手解答
...全文
253 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
胖作家 2021-04-29
  • 打赏
  • 举报
回复
我不仅想消除默认值的影响,还希望即便是有空余选项也能判断,比如我现在只选了CH1和CH2,CH3和CH4留白,这时程序也能够报错
胖作家 2021-04-29
  • 打赏
  • 举报
回复
引用 5 楼 泡泡鱼_ 的回复:
[quote=引用 3 楼 jio可 的回复:]

        let leds = $("select[id^=LED]")
        let ioas = $("select[id^=IOA]")
        function check() {
            let arr1 = []
            leds.each(function(i) {
                const val = $(this).val()
                const val1 = ioas[i].value
                if (val > 0 && val1 > 0) {
                    arr1.push(val+ '-'+val1)
                }
            })
            let arr2 = Array.from(new Set(arr1))
            if (arr1.length !== arr2.length) {
                alert('error')
            }
        }
没看你代码,你的代码已经把我说的写完了。我多余一说[/quote] 这个代码是伪码吗?我怎么调不通啊?
horizon_zpy 2021-04-27
  • 打赏
  • 举报
回复
去重 set是es6,浏览器能兼容啊?
泡泡鱼_ 2021-04-26
  • 打赏
  • 举报
回复
引用 3 楼 jio可 的回复:

        let leds = $("select[id^=LED]")
        let ioas = $("select[id^=IOA]")
        function check() {
            let arr1 = []
            leds.each(function(i) {
                const val = $(this).val()
                const val1 = ioas[i].value
                if (val > 0 && val1 > 0) {
                    arr1.push(val+ '-'+val1)
                }
            })
            let arr2 = Array.from(new Set(arr1))
            if (arr1.length !== arr2.length) {
                alert('error')
            }
        }
没看你代码,你的代码已经把我说的写完了。我多余一说
泡泡鱼_ 2021-04-26
  • 打赏
  • 举报
回复
引用 2 楼 胖作家 的回复:
[quote=引用 1 楼 jio可 的回复:]大于0才做判断就行了
不行,首先value是一个字符串,其次我试过在所有的值都不等于字符串0的时候判断,但是这样不会触发后续的循环。[/quote] 没你想的那么复杂。首先,把想判断的同类值,全放到一个数组中,然后,对数组filter,找出所有不是0的值,假如filter结果存储在变量arrA数组中。然后对数组去重,假设去重后的结果存储于arrB中。你只需要对比arrA.length!==arrB.length。如果为true,则说明有非0的重复项,反之则没有;或者你不去重,直接查重也行 这样的话,就不用你那种人工一个一个的对应去判断了。你要是来个10个,你不崩溃掉了……
jio可 2021-04-26
  • 打赏
  • 举报
回复

        let leds = $("select[id^=LED]")
        let ioas = $("select[id^=IOA]")
        function check() {
            let arr1 = []
            leds.each(function(i) {
                const val = $(this).val()
                const val1 = ioas[i].value
                if (val > 0 && val1 > 0) {
                    arr1.push(val+ '-'+val1)
                }
            })
            let arr2 = Array.from(new Set(arr1))
            if (arr1.length !== arr2.length) {
                alert('error')
            }
        }
胖作家 2021-04-26
  • 打赏
  • 举报
回复
引用 1 楼 jio可 的回复:
大于0才做判断就行了
不行,首先value是一个字符串,其次我试过在所有的值都不等于字符串0的时候判断,但是这样不会触发后续的循环。
jio可 2021-04-26
  • 打赏
  • 举报
回复
大于0才做判断就行了

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧