我有JavaScript值比较错误(例如3>10返回true)
I've got JavaScript value compare error (e.g. 3>10 return true)
我一直在为网页写一个函数,它应该做以下事情:
- 我可以设置最大值;
- 我可以设置的可用值不能大于最大值;
- 如果我不更改'available',它将始终与'max'相同;
- 当我调低'max'时,当'max' <'available', 'available'将显示为'max'(这是规则2);
我的问题是
- 当我设置'可用'小于10时,当我调整'max'为大于10时,'available'会突然意外地设置为'max';
- 当我将'available'设置为10到100之间时,出现同样的事情,当我将'max'调整为100以上时,'available'会突然意外地设置为'max';
(供您尝试的错误条件之一)-在网页:
- 设置'max'为7(无论小于10);
- 设置'available'为小于'max';
- 将'max'更改为大于10的值;
-> 'available'将更改为等于'max',比较结果为'TRUE'
谁能告诉我我的代码有什么问题?谢谢。我试了3台机器。
// (not important) simply for knowing if 'user' changed the value of 'available'.
var ref =0;
function function_a(max){
// (not important) for output reference only. *************************************
document.getElementById('display_index').innerHTML = (max < document.getElementById('available').value);
document.getElementById('display_index1').innerHTML = document.getElementById('available').value;
document.getElementById('display_index2').innerHTML = max;
// (not important) for output reference only. *************************************
// core function start: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (document.getElementById('available').value > max){
document.getElementById('available').value = max;
document.getElementById('display_available').innerHTML = max;
}
document.getElementById('display_init').innerHTML = max;
document.getElementById('available').max = max;
if(ref != 1 )
{
document.getElementById('available').value = max;
document.getElementById('display_init').innerHTML = max;
}
// core function end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
function function_b(ava){
ref = 1;
document.getElementById('display_init').innerHTML = ava;
if (ava > document.getElementById('max').value){
document.getElementById('available').value = document.getElementById('max').value;
}
}
<!-- *************** Output for reference *******************-->
Output : <b><span id="display_available">0</span> / <span id="display_init">0</span></b></p>
<p><label>Available : </label>
<input type="number" id="available" min="0" max="0" value="0" onchange="ref = 1; function_b(this.value);">
</p>
<p><label>Max Value: </label>
<input type="number" id="max" min="0" max="99999" value="0" onchange="function_a(this.value);">
</p>
<!-- *************** End of Output for reference *******************-->
<!-- *************** Main Function *******************-->
<fieldset>
<p>
Compare result: <span id="display_index"></span>
</p>
Values before function changed : Checking if <br>
Available: [<span id="display_index1">0</span>] >
Max : [<span id="display_index2">0</span>]
</fieldset>
<!-- *************** End of Main Function *******************-->
您所做的可能是字符串-> "3"answers"10"的比较。因此,您应该使用parseInt函数将它们解析为数字。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt正如@ fracry在评论中提到的;当比较值时,您将希望使用数字,而不是字符串。使用parseInt(value, radix)
使字符串成为整数(第二个参数,基数,是强制parseInt将该值视为小数)
if (parseInt(document.getElementById('available').value, 10) > parseInt(max, 10)) {
完整代码:
// (not important) simply for knowing if 'user' changed the value of 'available'.
var ref =0;
function function_a(max){
// (not important) for output reference only. *************************************
document.getElementById('display_index').innerHTML = (parseInt(max,10) < parseInt(document.getElementById('available').value,10));
document.getElementById('display_index1').innerHTML = document.getElementById('available').value;
document.getElementById('display_index2').innerHTML = max;
// (not important) for output reference only. *************************************
// core function start: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (parseInt(document.getElementById('available').value,10) > parseInt(max,10)){
document.getElementById('available').value = max;
document.getElementById('display_available').innerHTML = max;
}
document.getElementById('display_init').innerHTML = max;
document.getElementById('available').max = max;
if(ref != 1 )
{
document.getElementById('available').value = max;
document.getElementById('display_init').innerHTML = max;
}
// core function end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
function function_b(ava){
ref = 1;
document.getElementById('display_init').innerHTML = ava;
if (parseInt(ava,10) > parseInt(document.getElementById('max').value,10)){
document.getElementById('available').value = document.getElementById('max').value;
}
}
<!-- *************** Output for reference *******************-->
Output : <b><span id="display_available">0</span> / <span id="display_init">0</span></b></p>
<p><label>Available : </label>
<input type="number" id="available" min="0" max="0" value="0" onchange="ref = 1; function_b(this.value);">
</p>
<p><label>Max Value: </label>
<input type="number" id="max" min="0" max="99999" value="0" onchange="function_a(this.value);">
</p>
<!-- *************** End of Output for reference *******************-->
<!-- *************** Main Function *******************-->
<fieldset>
<p>
Compare result: <span id="display_index"></span>
</p>
Values before function changed : Checking if <br>
Available: [<span id="display_index1">0</span>] >
Max : [<span id="display_index2">0</span>]
</fieldset>
<!-- *************** End of Main Function *******************-->
如果您不想使用parseInt
,请考虑使用-
var three = '3';
var ten = '10';
if(three-ten>0)//3-10===-7
相关文章:
- 对于loop.if-仅在经过所有间隔后返回true
- 如果函数返回True,则显示Javascript按钮
- Javascript If else 只返回 TRUE 或只返回 FALSE
- 过滤器返回true或false
- 我对“;返回true"嵌套函数内部;t工作
- 如何在成功输入时使“返回TRUE”
- 检查一个元素是否有一个类与另一个类总是返回true
- JavaScript函数未返回true
- 如果URL中有任何字符串变体匹配,则返回true
- 如何使以下函数返回true或false
- 使用“in”关键字检查 0 始终返回 true
- hasOwnProperty 在对照父对象属性进行检查时返回 true
- 为什么 isNaN 总是返回 true
- _.数组中的每个查找值都返回 true 或 false.使用下划线 JS
- 错误地返回true
- 为什么asp:LinkButton服务器端事件没有'当clientClick返回true时,t激发
- 阻止表单提交 javascript 为什么有一个明显的错误语句返回 true
- Node js命令器args返回true而不是值
- 如何将html表单与php链接,以便在例如单击按钮时返回true
- 从OnClientClick调用函数时,在JavaScript中返回true