2015-11-03 49 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。 –

相關問題