【问题标题】:Checking multiple condition values does not output the else statement检查多个条件值不输出else语句
【发布时间】:2018-09-15 10:00:18
【问题描述】:

我正在尝试检查邮政编码列表,然后根据输入的邮政编码是否与列表中的一个匹配,为变量zipAssign 分配一个值。

在代码当前状态下,它始终显示“AB”。

有人看到我做错了吗?

$('#salesforce_submit').change(function () {
		//Find AB Zip Code
		var zipVal = '';
		var zipAssign = '';
		zipVal = $('#zip').val();
		if (zipVal = 44030 || 44048 || 44082 || 44003 || 44093 || 44076 || 44062 || 44021 || 44046 || 44099 || 44032 || 44047 || 44010 || 44057 || 44086 || 44064 || 44024 || 44023 || 44065 || 44022 || 44072 || 44040 || 44143 || 44094 || 44139 || 44146 || 44128 || 44105 || 44122 || 44124 || 44121 || 44117 || 44108 || 44110 || 44103 || 44106 || 44118 || 44120 || 44104 || 44114 || 44127 || 44125 || 44131 || 44134 || 44129 || 44130 || 44144 || 44109 || 44115 || 44136 || 44133 || 44147 || 44141 || 44067 || 44056 || 44087 || 44195) {	
			zipAssign = 'AB';
		} else {
			zipAssign = '';
		}
		console.log(zipAssign);
	});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form id="salesforce_submit" method="POST" enctype="multipart/form-data">
		<div><input id="zip" placeholder="Zip/Postal Code*" class="input block" maxlength="6" name="zip" type="text" pattern= "[0-9]{5}"></div>
    <input type="submit">
</form>

【问题讨论】:

    标签: javascript jquery if-statement conditional conditional-statements


    【解决方案1】:

    在代码当前状态下,它总是显示“AB”。

    有人看到我做错了吗?

    因为zipVal = 44030 || 44048 将始终返回一个真实值。

    创建zipVals 的数组并使用includes

    var zipVals = [ 44030 , 44048 , 44082 , 44003 , 44093 , 44076 , 44062 , 44021 , 44046 , 44099 , 44032 , 44047 , 44010 , 44057 , 44086 , 44064 , 44024 , 44023 , 44065 , 44022 , 44072 , 44040 , 44143 , 44094 , 44139 , 44146 , 44128 , 44105 , 44122 , 44124 , 44121 , 44117 , 44108 , 44110 , 44103 , 44106 , 44118 , 44120 , 44104 , 44114 , 44127 , 44125 , 44131 , 44134 , 44129 , 44130 , 44144 , 44109 , 44115 , 44136 , 44133 , 44147 , 44141 , 44067 , 44056 , 44087 , 44195 ];
    
        if ( zipVals.includes( +zipVal ) ) {    //convert zipVal to a number before using includes
            zipAssign = 'AB';
        } else {
            zipAssign = '';
        }
    

    【讨论】:

    • 我试过这个,它抛出了zipVal未定义的错误,所以我输入了var zipVal = '',但它并不总是显示为null。
    • Zipval 与您从输入框中得到的值相同
    • 完美。感谢您的帮助。
    【解决方案2】:

    您只是犯了一个小错误,您没有比较 (==) 两个值,而是在 if 条件中将一个值分配给另一个 (=)。

    我在这里重新创建了你的代码。

    $('#salesforce_submit').change(function () {
    		//Find AB Zip Code
    		var zipVal = '';
    		var zipAssign = '';
    		zipVal = $('#zip').val();
    		if (zipVal == 44030 || zipVal == 44048 || zipVal == 44082 || zipVal == 44003 || zipVal == 44093 || zipVal == 44076 || zipVal == 44062 || zipVal == 44021 || zipVal == 44046 || zipVal == 44099 || zipVal == 44032 || zipVal == 44047 || zipVal == 44010 || zipVal == 44057 || zipVal == 44086 || zipVal == 44064 || 44024 || 44023 || 44065 || 44022 || 44072 || 44040 || 44143 || 44094 || zipVal == 44139 || zipVal == 44146 || zipVal == 44128 || zipVal == 44105 || zipVal == 44122 || zipVal == 44124 || zipVal == 44121 || zipVal == 44117 || zipVal == 44108 || zipVal == 44110 || zipVal == 44103 || zipVal == 44106 || zipVal == 44118 || zipVal == 44120 || zipVal == 44104 || zipVal == 44114 || zipVal == 44127 || zipVal == 44125 || zipVal == 44131 || zipVal == 44134 || zipVal == 44129 || zipVal == 44130 || zipVal == 44144 || zipVal == 44109 || zipVal == 44115 || zipVal == 44136 || zipVal == 44133 || zipVal == 44147 || zipVal == 44141 || zipVal == 44067 || zipVal == 44056 || zipVal == 44087 || zipVal == 44195) {	
    			zipAssign = 'AB';
    		} else {
    			zipAssign = '';
    		}
    		console.log(zipAssign);
    	});
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <form id="salesforce_submit" method="POST" enctype="multipart/form-data">
    		<div><input id="zip" placeholder="Zip/Postal Code*" class="input block" maxlength="6" name="zip" type="text" pattern= "[0-9]{5}"></div>
        <input type="submit">
    </form>

    但我强烈建议创建一个邮政编码数组并将其与输入值循环以进行比较。

    我希望这会对你有所帮助。谢谢。

    【讨论】:

    • || 操作符不是这样工作的。表达式 (44030 || 44048 || 44082 || (etc.) 只会计算出第一个真值,在本例中为 44030。
    【解决方案3】:

    很遗憾,你不能这样做。

    这就是你要找的东西:if (zipVal === 44030 || zipVal === 44048 || etc...)

    但是,另一种选择是创建一个包含所有邮政编码的数组,然后使用 if (myArray.includes(zipVal)) 检查您的情况

    【讨论】:

    • = 应该是==
    【解决方案4】:
    1. 检查相等时,需要写=====而不是=zipVal == 44030

    2. 当您想将同一个变量与多个值进行比较时,您仍然需要写出所有条件:zipVal == 44030 || zipVal == 44048 || (etc.)

    但是请注意,这不是检查一个值是否在这么大的一组值中的好方法。相反,您应该将邮政编码收集到一个数组中:

    var zipCodes = [ 44030, 44084, (etc.) ]
    

    然后只需使用.includes():

    if (zipCodes.includes(zipVal)) {
        zipAssign = 'AB';
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-06
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 2020-12-29
      • 1970-01-01
      相关资源
      最近更新 更多