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;"确实会停止回发。

javascript在switch中返回false后仍在返回

在这种情况下,确实是return falseswitch返回,而不是整个函数。你想做的是创建一个标志变量,当你想在切换后从函数返回时,检查标志:

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客户端库在直接返回函数调用时会出现问题,但从未考虑过原因。