2015-11-03 127 views
0

我试图检查以确保中继器的页脚中的某些字段在尝试向中继器添加一行时不是空白。我试图通过JavaScript来验证这一点,可重复使用的代码为几个不同的中继器(通过滥用的ID):在javascript中返回false后仍然回发错误

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; 

的问题是,它仍然是回发,即使我有返回假那里。我也包括在我的clientclick电话:

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

如果我注释掉的开关,只是说返回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 =“返回false;”尽管停止回发。

+0

你知道'id's必须是** unique **作为每个文档吗?如果你这样做了,你会发现'$(“#HWProduct”)。find(“#AddProduct”)总是和$(“#AddProduct”)一样。 – connexo

+0

只有空的选择有一个val()null –

+0

@connexo这不会在HWTable中寻找#AddProduct吗?那是我的意图。我有几个其他表具有相同的行。我提到我滥用ID来重复使用其他表的代码。它在至少 –

回答

0

试试这个:

if (!EmptyFieldCheck('Hardware')) { return false; } else { return true; } 

我见过的.NET客户端库有问题时,只需直接返回一个函数调用,但从未费心去考虑为什么。

+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 */ 
} 
+0

这似乎是合乎逻辑的,但它仍然回帖,有和没有包括其他答案。 –

1

让我们揣摩出你的错误来自:

  • 返回falseEmptyFieldCheck有预期的行为,因此在这里没有“wireup”问题
  • 您的交换机似乎并没有工作,因此错误是在那里
  • 在交换机的return false语句内if
  • 所以if必须评估为假
  • 这意味着$("#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()抛出一个异常恰好返回不是字符串的东西(例如,在空选择器或多选控件的情况下)。

+0

我认为这绝对是文本框设计上的一个改进,但是如果IS评估为真实的,因为我仍然可以在回发之前弹出警报。我认为这是因为检查的元素之一是一个选择,它在空时返回null。 –

相关问题