2014-01-30 5 views
1

Я работал над скриптом, который будет проверять, существует ли новый вход «значение/строка», но пока я не могу найти правильное/эффективное решение.JQuery Array/String Search

<input type="text" class="existingKeywords" value="string1, string2, string3"> 
<input type="text" class="newKeyword" value=""> 

значение .newKeyword будет защищать от ввода пользователя и сразу подавать кнопки мыши, она будет проверять, если newKeyword.val() уже существуют с .existingKeywords.val(); разделенных «»

Я пытался, но возвращает „JSON синтаксический неожиданный характер“

var arr = JSON.parse("[" + $('.existingKeywords').val() + "]"); 
    var newKey = $('.newKeyword').val(); 
    if(jQuery.inArray (newKey, arr)){ 
    alert('Found!'); 
    } 

Может кто-нибудь сказать мне, почему он не работает, или есть лучший подход, чем это?

Спасибо!


Спасибо большое, ребята, сценарий теперь отлично работает. Я хочу ответить «Проголосовать», но он требует 15 баллов, и на момент написания этой статьи у меня было только 13 репутации. И снова gracias все.

+0

Возможный дубликат [Javascript: определить, содержит ли массив значение] (http://stackoverflow.com/questions/1181575/javascript-determine-whether-an-array-contains-a-value) – Rob

ответ

1

Это не работает, потому что эта линия:

var arr = JSON.parse("[" + $('.existingKeywords').val() + "]"); 

трактует этот путь:

var arr = JSON.parse("[string1, string2, string3]"); 

, которая не является правильным JSON - строки внутри должно быть в кавычках, иначе JSON.Parse не знает, что это string1.

Как другой предложил вам нужно использовать split здесь вместо этого, я хотел бы добавить только зачистка ведущие/ведомые пробелы:

var arr = $('.existingKeywords').val().split(',').map(function(s) { return s.trim();}) 
var newKey = $('.newKeyword').val().trim(); 
if($.inArray (newKey, arr) != -1){ 
    alert('Found!'); 
} 

Но почему бы вам не использовать select с несколькими всячески манипулировать? Удобнее, что ключевые слова типа я думаю.

+0

Спасибо, мистер ГРАЛ, мой сценарий работает отлично, и ответ каждого - приемлемый ответ. – 1mr3yn

+0

Пожалуйста, поддержите ответы, если найдете их полезными, ура! – Aditya

1

Возможно, вы могли бы использовать старый добрый String.split()?

Что-то вроде этого:

var arr = $('.existingKeywords').val().split(','); 
var newKey = $('.newKeyword').val(); 

if(jQuery.inArray(newKey, arr) != -1){ 
    alert('Found!'); 
} 
+0

Я пробовал, но .inArray() всегда возвращает true, независимо от значения newKeyword. – 1mr3yn

+0

Это потому, что 'inArray' не возвращает true/false. Когда ключевое слово найдено, оно возвращает индекс в массиве - от '0' до' arr.length-1'. Когда он не найден, он возвращает '-1', который также интерпретируется как' true' – GRaAL

+0

благодаря г-ну GRaAL и вашему ответу, теперь он отлично работает! – 1mr3yn

1
var arr = $('.existingKeywords').val().split(','); 
    var newKey = $('.newKeyword').val(); 
    if($.inArray (newKey, arr)){ 
    alert('Found!'); 
    } 
1

Это будет проверять регистронезависимые значения дубликатов, а также и, пожалуйста, попробуйте получить значение ввода с идентификатором вместо класса безопаснее ...

var array = $('.existingKeywords').val().split(','); 
    var new_array =[] ; 

    for(var key in array) 
    new_array.push(array[key].toLowerCase()); 

    var newkeyword = $('.newKeyword').val().toLowerCase(); 

if($.inArray (newkeyword , new_array)!== -1){ 
    //found your value 
    }