javascript - Skontrolujte, či sú všetky hodnoty v poli rovnaké
Mám webovú stránku, ktorá má textové pole.
Keď používateľ zadá do neho informácie, vykoná sa volanie AJAX, aby sa zistilo, či je zadanie platné, ak nie, deaktivuje tlačidlo.
Môžu tiež pridať až 10 textových polí, čo sa robí pomocou šablón jQuery. V tomto momente má každé textové pole triedu serial a keď textové pole serial stratí fokus, vykoná sa táto kontrola.
Ak zadajú neplatné sériové číslo, tlačidlo sa deaktivuje, ale ak pridajú nové textové pole a to je platné, tlačidlo je teraz povolené, čo je nesprávne, pretože jedno je stále neplatné.
Jediný spôsob, na ktorý si viem spomenúť, ako to urobiť, je pridať 1 alebo 0 do poľa pre každé textové pole a keď sú všetky prvky v poli 1, potom povoliť tlačidlo. Je to dobrý prístup, ak nie, prosím vysvetlite lepší. Ak je to dobrý prístup, ako skontrolujem, že všetky hodnoty v poli JavaScript sú rovnaké?
Ďakujem
Odpoveď č. 1
Toto znie ako dobrý prístup. Rovnaké prvky v poli JavaScript môžete skontrolovať pomocou tejto jednoduchej javascriptovej funkcie. Môžete ju vložiť do konzoly Firebug, aby ste skontrolovali jej funkčnosť.
// check if all elements of my_array are equal, my_array needs to be an array
function check_for_equal_array_elements(my_array){
if (my_array.length == 1 || my_array.length == 0) {
return true;
}
for (i=0;i<my_array.length;i++){
if (i > 0 && my_array[i] != my_array[i-1]) {
return false;
}
}
return true;
}
//Example:
var my_array = [];
my_array.push(5);
my_array.push(5);
// will alert "true"
alert("all elements equal? "+check_for_equal_array_elements(my_array));
my_array.push(6);
// will alert "false"
alert("all elements equal? "+check_for_equal_array_elements(my_array));
Odpoveď č. 2
Predpokladám, že máte funkciu isValid(str), ktorá vracia boolean.
Keďže používate jQuery, môžete využiť funkciu filter() jQuery na jednoduché overenie, či sú nejaké vstupy neplatné kedykoľvek vstup stratí fokus:
$('.serial').live('blur', function () {
// Get an array of all invalid inputs
var invalids = $('.serial').filter(function () {
return !isValid($(this).val());
});
// Does the array contain anything?
$('#button').prop('disabled', invalids.length);
});
Demo: http://jsfiddle.net/3RNV6/
Podobný koncept, ale na použitie s AJAX:
$('.serial').live('blur', function () {
var me = this;
$.ajax({
// ajax config
success: function (data) {
if (data === 'Y') $(me).addClass('valid');
// Get an array of all invalid inputs
var invalids = $('.serial').filter(function () {
return !$(this).hasClass('valid');
});
// Enable if none invalid
if (invalids.length === 0) $('#button').prop('disabled', false);
}
});
});
$('.serial').live('keypress', function () {
$('#button').prop('disabled', true);
$(this).removeClass('valid');
});
