javascript在switch中返回false后仍在返回
本文关键字:返回 false switch javascript | 更新日期: 2023-09-27 18:20:21
当我试图向中继器添加一行时,我正在尝试检查以确保中继器页脚中的一些字段不是空白的。我试图通过javascript验证这一点,并为几个不同的中继器提供可重复使用的代码(通过滥用ID):
switch (category)
{
case 'Hardware':
if ($("#HWtable").find("#AddProduct").val() == null ||
$("#HWtable").find("#AddPartNumber").val() == null ||
$("#HWtable").find("#AddPartCost").val() == null ||
$("#HWtable").find("#AddUnitPrice").val() == null ||
$("#HWtable").find("#AddQuantity").val() == null)
{
alert("show HW message");
HWEmptyFieldAlert.show();
return false;
}
break;
问题是,即使我在那里的退货是假的,它仍然在寄回。我还将其包含在我的客户端点击呼叫中:
onClientClick="return EmptyFieldCheck('Hardware');"
如果我评论掉开关,只说return false,那么一切都如预期的那样。我最好的猜测是,我只是从if或switch中返回,而不是返回帖子。我该如何正确地进行此操作?
编辑:根据下面其他人的建议,我尝试了一个标志,并在客户端点击时反转真/假状态。我现在在下面的内容仍然在张贴,我真的不知道为什么。当我点击时,我确实看到了警报,所以它已经到了那个地步。
var emptyFlag;
switch (category)
{
case 'Hardware':
/*
if ($("#HWtable").find("#AddProduct").val() == null ||
$("#HWtable").find("#AddPartNumber").val() == null ||
$("#HWtable").find("#AddPartCost").val() == null ||
$("#HWtable").find("#AddUnitPrice").val() == null ||
$("#HWtable").find("#AddQuantity").val() == null)
{
*/
alert("show HW message");
HWEmptyFieldAlert.show();
emptyFlag = false;
//}
break;
default:
alert("doesn't work");
return false;
break;
}
return emptyFlag;
这与我使用中继器的OnItemCommand功能有关吗?返回false而不是emptyFlag不再有效。不过,OnClientClick="return false;"确实会停止回发。
在这种情况下,确实是return false
从switch
返回,而不是整个函数。你想做的是创建一个标志变量,当你想在切换后从函数返回时,检查标志:
function EmptyFieldCheck( .. )
{
var returnFlag = false;
switch (category) {
case 'Hardware':
if(..)
{
...
returnFlag = true;
}
break;
...
}
if(returnFlag) return false;
/* Other posting code here */
}
让我们弄清楚你的bug来自哪里:
- 从
EmptyFieldCheck
返回false
具有预期行为,因此此处不存在"连线"问题 - 你的开关似乎不工作,所以bug就在里面
- 交换机中的
return false
语句在if
中 - 所以
if
的求值必须为false - 这意味着
$("#HWtable").find("#x").val() == null
总是false
,即使你认为它不是
如果字段为空,则jQuery.val()
不会返回null
。空字段是一个零长度的字符串(即""
),因此这种比较可能更合适:
$("#HWtable").find("#x").val().length === 0
如果你查看这个jsFiddle,你会看到:
$input.val(""); // Set to empty
$input.val() == null; // returns false, not true, as your code suggests
这与猜测一致。所以你的固定代码应该包含:
$("#HWtable").find("#AddPartNumber").val().length === 0 ||
$("#HWtable").find("#AddPartCost").val().length === 0 ||
// etc.
或者,如果你真的想避免任何进一步的wierd错误:
$("#HWtable").find("#AddPartNumber").val().trim().length === 0 ||
$("#HWtable").find("#AddPartCost").val().trim().length === 0 ||
// etc.
因为如果.val()
碰巧返回了不是字符串的东西(例如,在选择器为空或多选控件为空的情况下),.trim()
既会删除空白,也会引发异常。
试试这个:
if (!EmptyFieldCheck('Hardware')) { return false; } else { return true; }
我看到过.NET客户端库在直接返回函数调用时会出现问题,但从未考虑过原因。