我正在尝试检查以确保在尝试向转发器添加一行时,转发器页脚中的某些字段不为空。我试图通过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;”确实会阻止回发。
答案 0 :(得分:1)
在这种情况下确实是return false
从switch
而不是整个函数返回。你要做的是创建一个标志变量,当你想在切换后从函数返回时,检查标志:
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客户端库在直接返回函数调用时遇到问题,但从不打扰查看原因。