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(",");
}