在javascript在

时间:2015-11-03 16:42:04

标签: javascript c# asp.net validation switch-statement

我正在尝试检查以确保在尝试向转发器添加一行时,转发器页脚中的某些字段不为空。我试图通过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;

问题是,即使我在那里返回false,它仍然会回发。我也把它包含在我的客户端电话中:

onClientClick="return EmptyFieldCheck('Hardware');"

如果我注释掉开关并且只是说返回false,那么一切都按预期工作。我最好的猜测是,我只是退出了if或者开关,而不是回传。我该怎么做呢?

编辑:在下面的其他建议中,我尝试了一个标志并在客户端点击时反转了真/假状态。我现在在下面的内容仍然是回帖,我真的不知道为什么。我点击时确实看到警报,所以它已经走得那么远了。

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

3 个答案:

答案 0 :(得分:1)

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

function EmptyFieldCheck( .. )
{
    var returnFlag = false;
    switch (category) {
        case 'Hardware':
            if(..)
            {
                ...
                returnFlag = true;
            }
            break; 
        ...
    }
    if(returnFlag) return false; 
    /* Other posting code here */
}

答案 1 :(得分:1)

让我们弄清楚你的bug来自哪里:

  • false返回EmptyFieldCheck有预期的行为,因此此处没有“连线”问题
  • 您的开关似乎不起作用,因此错误就在那里
  • 您的交换机中的return false语句位于if
  • 之内
  • 因此if必须评估为false
  • 这意味着$("#HWtable").find("#x").val() == null总是false,即使您认为不是
如果字段为空,

jQuery.val()将不会返回null。空字段是零长度字符串(即""),因此这种比较可能更合适:

$("#HWtable").find("#x").val().length === 0

如果您查看this 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.

或者,如果你真的想避免任何更严重的错误:

$("#HWtable").find("#AddPartNumber").val().trim().length === 0 ||
$("#HWtable").find("#AddPartCost").val().trim().length === 0 ||
// etc.

因为.trim()将删除空格并且如果.val()碰巧返回不是字符串的内容(例如在具有空选择器或多选控件的情况下),则会抛出异常。

答案 2 :(得分:0)

试试这个:

int

我刚刚看到.NET客户端库在直接返回函数调用时遇到问题,但从不打扰查看原因。