JQuery/ Javascript: массивы

Я начинающий с Javascript/jQuery, и я надеюсь, что кто-то может помочь мне со следующим:

У меня есть простая форма (7 вопросов; 3 радиокнопки / ответы на вопрос - кроме вопроса 5 с 8 возможными вариантами ответов), и на основе выбранных ответов, когда пользователь нажимает "view-advice", я хочу отобразить соответствующие советы (комбинация из 38 возможных советов) ниже формы. Я дал значения "a", "b", "c",... значениям радиокнопок и собираю их в массив. Часть, где скрипт предупреждает массив, работает нормально. Я не могу понять, где я показываю советы в зависимости от значений в массиве.

Буду признателен за вашу помощь! Спасибо!

Вот код:


var laArray = new Array();

$('.button-show-advice').click(function(){

    $(":radio:checked").each(function(i){
        laArray[i] = $(this).val();
        if (laArray == ["a","d","g","j","m","u"]) {
        $("#advice-container, #advice1, #advice2").show(); // something is wrong here :(
            };
    })
    alert(laArray) // testing to see if it works

})

3 ответа

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

Конечно, это только начало кода. Вероятно, вы могли бы написать функцию для поддержки этого, например, так.

function radioSelected(val) {
  return ($.inArray(val, laArray) != -1);
}

и адаптировать его к существующему сценарию.

Было бы приятно увидеть HTML-код. Но я думаю, вы хотите сделать что-то вроде этого:


var laArray = [];
var compareValues = function(arr1, arr2) {
  $(arr1).each(function(index, el) {
   if(el !== arr2[index]) {
     return false;
   }
  });
  return true;
};

$('.button-show-advice').click(function(){
    $(":radio:checked").each(function(i){
        laArray.push($(this).val());        
    });
   if(compareValues(laArray,["a","d","g","j","m","u"])) {
      $("#advice-container, #advice1, #advice2").show();
   }  
});

РЕДАКТИРОВАТЬ: обновил код, забыл}); ...

Вы не можете сравнивать массивы таким образом, вы, вероятно, должны либо сравнить каждый элемент из 2 массивов

function compare_array(array1,array2) {
    var i;
    for(i=0;i=array1.length;i++) {
        if(array1[i]==array2[i]) {
            return false;
        }
    }
    return true;
}

или сериализовать массив в сопоставимой форме (например, через запятую)

function compare_array(array1,array2) {
     return array1.join(",")==array2.join(",");
}
Другие вопросы по тегам