2012-08-28 62 views
0

我inArray jQuery的驗證這麼想的工作:jQuery的inArray驗證問題

的HTML:

<input type="text" name="number" class="verify" conditions="requierd numeric"/> 
<input type="text" name="number2" class="verify" conditions="requierd string"/> 

jQuery代碼和我inArray驗證:

$('input.verify').blur(function(){ 
     var conditions = $(this).attr('conditions').split(' '); 
      if($.inArray('requierd', conditions)){ 
       alert('ok'); 
      } 
    }); 

但是當我把=== false它的工作背後,我的情況!

$('input.verify').blur(function(){ 
     var conditions = $(this).attr('conditions').split(' '); 
      if($.inArray('requierd', conditions) === false){ 
       alert('ok'); 
      } 
    }); 

爲什麼?

感謝

回答

1

官方documentation說:

返回-1,當它沒有找到一個匹配。如果數組中的第一個元素匹配值,則$ .inArray()返回0.

因爲JavaScript將0視爲大致等於false(即0 == false,但是0!== false),所以如果我們檢查數組中是否存在值,我們需要檢查它是否等於(或大於)-1。

0

像與indexOf()$.inArray必須對-1進行檢查。否則,如果找不到元素,它將返回-1,這是我的一個真實值,即它會將您的條件解析爲真。

簡而言之:

if ($.inArray('something', array) != -1) 

注意,雖然你並不真正需要分割的條件字符串 - 你可以使用正則表達式用字邊界。

if (/\brequired\b/.test($(this).attr('conditions')) { /* code */ } 

最後,你應該使用data-屬性,而不僅僅是發明了自定義屬性,因爲後者會取消你的HTML。

0

$.inArray()將返回-1如果沒有找到該元素,這將計算爲true。使用:

if (~$.inArray('requierd', conditions)) 

這將工作,因爲~-1 == 0 == false。或者,作爲替代方案,以及迄今最常見的:

if ($.inArray('requierd', conditions) != -1)