2016-08-12 3 views
0

Чтобы упростить мою проблему, я переписал код без разбора CSV, но вместо этого с переменной, которая хранит данные.jQuery проверить несколько списков CSV

--CODE EDIT ---

$(document).ready(function() { 
    var qID = 'xxx'; 
    var source = ['text1', 'text2', 'etc3']; 
    var source2 = ['text4', 'text5', 'etc6']; 
    $('#question' + qID + ' input[type="text"]').change(function() { 
     var validVal = 0; 
     var inputVal = $(this).val(); 
     // Loop through the text and test the input value 
     $(source).each(function(i) { 
      if (inputVal == this) { // If a match is found... 
       validVal = 1; 
      } 
     }); 
     // If a valid text was entered 
     if (validVal == 1) { // A valid input 
      alert("GOOD"); 
     } else { // An invalid input 
      alert("NOT GOOD"); 
     } 

     var validVal2 = 0; 
     var inputVal2 = $(this).val(); 

     $(source2).each(function(j) { 
      if (inputVal2 == this) { // If a match is found... 
       validVal2 = 1; 
      } 
     }); 
     // If a valid text was entered 
     if (validVal2 == 1) { // A valid input 
      alert("GOOD2"); 
     } else { // An invalid input 
      alert("NOT GOOD2"); 
     } 
    }); 
}); 

Скрипт работает отлично для одного источника (источник вар), но я хочу, чтобы проверить в одном текстовом поле 2 переменных (источник, source2), который будет производить разные оповещения.

Сценарий запускается через форму limesurvey, а вход - это простое поле [type = "text"].

Как проверить наличие двух разных массивов текста в одном текстовом поле?

+0

Насколько я вижу переменную * fullArray * является глобальным, и это может быть один из вопросов. Вы должны поместить * var * раньше, чтобы определить его локально. –

+0

Я пробовал его и до сих пор не могу заставить его работать ... Я не думаю, что мне удастся иметь 2 или 3 $ .get (url, function (data) с различным URL-адресом под тем же $ (документом)? Любые идеи? – qwertyg

+0

Вы можете получить все * $. Get * вы хотите в * $ (document) .ready() *. Укажите код, в котором вы загружаете другой файл csv, и добавьте более подробную информацию о своей проблеме. произошло? –

ответ

2

Всякий раз, когда вы обнаруживаете, что ставите счетчики на имена переменных, чтобы создать серию, вам нужно остановиться и подумать о том, что вы на самом деле делаете там. Создание имен подсчитанных переменных - всегда неверно.

Использование массивов.

var qID = 'xxx'; 

var source = []; 
source.push(['text1', 'text2', 'etc']); 
source.push(['text1', 'text2', 'etc44']); 
source.push(['text15', 'text25', 'etc454']); 

$('#question' + qID + ' input[type="text"]').change(function() { 
    var valid = false; 
    var inputVal = $(this).val(); 

    $.each(source, function(i, terms) { 
     $.each(terms, function(i, term) { 
      valid = inputVal === term; 
      return !valid; // returning false stops the .each() loop 
     }); 
     return !valid; 
    }); 

    if (valid) { 
     alert("GOOD"); 
    } else { 
     alert("NOT GOOD"); 
    } 
}); 

Более привлекательный способ, чтобы выразить вложенный цикл выше использует встроенные методы Array.

var valid = source.some(function (terms) { 
    return terms.includes(inputVal); 
}); 

в синтаксисе ES6 это может быть сделано Однострочник:

var valid = source.some(terms => terms.includes(inputVal)); 
+0

Большое спасибо за ваш ответ и время, чтобы опубликовать этот код. То, что я пытаюсь выполнить, однако, запускается, если 3 раза с момента источника, переменные source2 и source3 должны быть проверены для проверки отдельно и производить различные предупреждения. Я редактировал мой код выше, чтобы понять, что я имею в виду. Для одной переменной все работает так, как ожидалось, но когда я пытаюсь проверить в том же текстовом поле, 3 разных массива для кода проверки не работают должным образом. Я не получаю никаких ошибок, но результат неверен. – qwertyg

+0

@qwertyg Hm ... Мой код действительно не отличается от вашего. Ничто не мешает вам проверять 'source [0]', 'source [1]' и 'source [2]' для проверки отдельно и с различными предупреждениями. – Tomalak

+0

thnx снова, я пробовал ваш код, и он отлично работает, как и для одной проверки. Я пытался вместо $ .each (source, function (i, terms) искать только в источнике [0] как: $ .each (source [0], function (i, terms)), тогда он не работает. синтаксическая ошибка в каждом? Если я предупреждаю источник [0], я вижу, что отображается правильный массив. Что может быть неправильным? – qwertyg

Смежные вопросы