2013-03-05 20 views
0

假設我正在製作註冊表單。現在我想讓它突出顯示四個總場中的空場。現在我可以做一堆if-else語句,但這會花費很長時間。在if語句中查找不正確的特定參數?

比方說,我有以下代碼:

的Javascript:

if($firstname === "" || $lastname==="" || $email ==="" && $phone === ""){ 
     //What goes here? 
    } 

我想括號內的信息以找到這些($名字,$姓氏等)是真實的,然後允許它更改該特定變量的CSS,以便我可以點亮輸入字段以顯示其信息尚未輸入。

現有代碼: http://jsfiddle.net/EVkge/

Click on JSFiddle to see code 

回答

3

你這個過於複雜,只需使用addClass()與匿名函數:

$('input').addClass(function() { 
    return this.value == '' ? 'empty' : ''; 
}); 

JS Fiddle demo

明顯地改變empty的類名,無論你喜歡哪一個類名;因爲您可能已經猜到了''之後的:是一個空字符串,如果this.value而不是等於''?之前的評估),則返回空字符串。

正如評論中指出的那樣,如果能夠在相關的input元素變爲非空時移除添加的類,這將會更好;考慮到這一點,一個簡單的方法,其工作應該是顯而易見的:

$('input:button').click(function() { 
    $('input').each(function() { 
     var that = $(this), 
      val = that.val(); 
     if (val === '') { 
      that.addClass('empty'); 
     } else { 
      that.removeClass('empty'); 
     } 
    }); 
}); 

JS Fiddle demo

,其次,更簡明的方法即相當於上述:

$('input:button').click(function() { 
    $('input').each(function(){ 
     $(this)[this.value == '' ? 'addClass' : 'removeClass']('empty'); 
    }); 
}); 

JS Fiddle demo

這利用了以下事實的優點某個對象的方法可以同時使用符號形式Object.propertyNameObject['propertyName']也使用運行在那些方括號條件(三元)運算的能力,以確定被訪問,是否addClass()removeClass()應該使用方法來處理以下括號中提供的empty類名。

參考文獻:

+0

你能解釋第二條線。什麼是空引號和問號?對不起,我是初學者,所以我只是想學習。 – 2013-03-05 00:33:21

+0

這是一個[三元(或條件)操作符](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Conditional_Operator)。返回的值取決於對條件的評估;如果條件爲「真」,則返回第一個值「empty」,如果爲「false」,則返回空字符串「'」。 – 2013-03-05 00:34:47

+0

@David - 我認爲你也需要在適當的時候刪除這個類。我在四個字段中的兩個字段中輸入了值,然後單擊提交按鈕,兩個空字段按照它們應該顯示的高亮顯示。然後我輸入其中一個,再次點擊提交按鈕,並且這兩個字段保持高亮顯示。 – 2013-03-05 00:50:37

1

您可以遍歷字段並檢查每個字段是否爲空如上所述添加類。

$('input:button').click(function() { 
    $('input[type="text"]').each(function (indx) { 
     var $currentField = $(this); 
     if($currentField.val() == '') { 
      $currentField.addClass('empty'); 
     } else { 
      $currentField.removeClass('empty'); 
     } 
    }); 
}); 

我也在這增加了一些額外的功能,爲您提供: http://jsfiddle.net/jeffpowrs/Wzj8M/1/