2013-07-21 64 views
11
if($('#this').val().indexOf('4289')){ 
    Do something 
else 
    Do something. 

這僅適用與4289
當我嘗試添加其他號碼旁邊被索引它使用「或」來,這是行不通的。我應該如何放置其他號碼。 E.g如何使用的IndexOf在JQuery中

IndexOf('4289||78843') 

我想這個檢查這個號,如果在輸入字段的數量不是這一個,呼應錯誤。

下面是當人們重新訪問該字段時發生的更多事情。

$('#Zip').blur(function(){ 
     if (($(this).val().indexOf('0860') > -1)||($(this).val().indexOf('0850') > -1)){ 
     $('#Status_Zip').html("No way.") 
     $(this).alterClass('*_*', 'Success') 
     return false; 
     }else{$('#Status_Code').hide() 
     $(this).alterClass('*_*', 'Error') 
     $(this).css('border-color', '#F00').css('background-color', '#FFC').effect("pulsate",{times:4},2) 
      return true; 
     } 
    }) 

回答

18

這是因爲它要尋找的字符串'4289||78843',這並不在我假設的目標存在。邏輯運算符不能隨便扔到任何地方,只要有邏輯運算的實際值。事情是這樣的:

if(($('#this').val().indexOf('4289') > -1) || 
    ($('#this').val().indexOf('78843') > -1)) 

indexOf()函數的返回值是在目標值值的數字索引,或者-1如果它沒有找到。因此,對於您要查找的每個值,您都需要檢查它的索引是否爲> -1(這意味着它在字符串中找到)。採取整個條件,並與另一個條件||,這是一個合乎邏輯的操作。

編輯:關於你的評論,如果你想摘要弄成一個小更清潔,更通用的,你可以將其解壓縮到它自己的功能,迭代的字符串的集合,並返回true如果任何人都在目標字符串。也許是這樣的:

function isAnyValueIn(target, values) { 
    for (var i = 0; i < values.length; i++) { 
     if (target.indexOf(values[i]) > -1) { 
      return true; 
     } 
    } 
    return false; 
} 

甚至有可能是一個更優雅的方式做,與.forEach()陣列上,但是這至少證明了這個想法。然後,在代碼中的其他地方,您可以構建值的數組並調用該函數:

var values = ['4289', '78843']; 
var target = $('#this').val(); 
if (isAnyValueIn(target, values)) { 
    // At least one value is in the target string 
} 
+0

好吧,那很好。它正在工作。唯一的情況是,如果我要放置超過20個這樣的數字,那麼這些代碼在很多指標上都會很長。我們不能在那裏縮短某處的東西。 ? –

+0

@ BlessingThinker:當然,它可以被抽象爲它自己的通用功能。任何時候代碼中都有大量的複製/粘貼操作,那麼至少可以提取一個函數。除此之外,還有更多的方法,但看起來很簡單。我用一個例子更新了答案。 – David

+0

我使用了模糊處理,然後人們將正確的數字進行驗證,但是當您返回並將該數字更改爲其他內容時,該函數似乎已經死亡。 –