javascript - Verificare che tutti i valori in un array siano uguali
Ho una pagina web che ha una casella di testo.
Quando l'utente inserisce delle informazioni al suo interno, effettua una chiamata AJAX per verificare se l'inserimento è valido, altrimenti disabilita un pulsante.
Possono anche aggiungere fino a 10 caselle di testo, cosa che viene fatta tramite jQuery Templates. Al momento ogni casella di testo ha una classe di 'serial' e quando una casella di testo seriale perde il fuoco esegue questo controllo.
Se inseriscono un seriale non valido, il pulsante verrà disabilitato, ma se aggiungono una nuova casella di testo e quella è valida, il pulsante è ora abilitato, il che è sbagliato poiché ce n'è ancora uno non valido.
L'unico modo a cui riesco a pensare per fare questo è aggiungere un 1 o uno 0 a un array per ogni casella di testo e, una volta che tutti gli elementi dell'array sono 1, abilitare il pulsante. È un buon approccio, altrimenti per favore spiega uno migliore. Se è un buon approccio, come faccio a verificare che tutti i valori in un array JavaScript siano uguali?
Grazie
Risposta n. 1
Questo sembra un buon approccio. Puoi controllare gli elementi uguali in un array JavaScript usando questa semplice funzione JavaScript. Puoi incollarla nella console di Firebug per verificarne il funzionamento.
// 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));
Risposta n. 2
Presumerò che tu abbia una funzione isValid(str) che restituisce un booleano.
Dato che stai usando jQuery, puoi approfittare della funzione filter() di jQuery per controllare facilmente se ci sono input non validi ogni volta che un input perde il focus:
$('.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/
Concetto simile, ma per l'uso con 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');
});
