Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]array jquery
Forum PHP.pl > Forum > Przedszkole
tomi1985
Witam,
jestem początkujący w posaniu kodu w jquery i od razu napotkałem na problem generowania błędów do tablicy:

https://gist.github.com/anonymous/7481349

a mianowicie tablica errors cały czas jest pusta choć z warunku wynika że powinna zawierać 1 rekord

proszę o pomoc
nospor
Ciezko sprawdzic czy na pewno w warunek ci wchodzi?

alert('widzisz mnie?exclamation.gif!!!');
errors[value] = 'proszę podać minimalną ilość znaków';

Jak zobaczysz alert, znaczy ze wszedl i to nie problem warunku tylko tablicy.

Zas co do samej tablicy to do niej sie raczej wklada rzeczy przy po mocy PUSH. Zajrzyj do manuala js, bo to z samym jquery nie ma nic wspolnego
tomi1985
push nie jest zły tylko że ja chce miec tak jakby "klucz i wartosc" z push'em to tylko wartość będe mieć....

Kod
$.each(tablica, function(key, value){
            if($('input[name='+value+']').val().length > 3){ // if to less lenght then error
                alert($('input[name='+value+']').val());                            
            }else{
                errors[value] = 'proszę podać minimalną ilość znaków';  
            }
            //inputName[value] = $('input[name='+value+']').val(); //przypisanie zmiennych formularza            
        });
        
        if(errors.length > 0){
            alert('g');
        }


jak dam errors.lenght = 0 to alert się wyswietli lub manulanie dam

Kod
alert(errors['name2']);


takze oznacza to ze warunek mi wchodzi smile.gif

Nie potrafie tego zrozumieć.. wyglada tak jakby tablica była pusta a jak manualnie sprawdze dane pole z tablicy to są tam dane ;/
werdan
  1. errors[value] = 'proszę podać minimalną ilość znaków';



Daj errors[key] lub errors.push('proszę podać minimalną ilość znaków');



Cytat
push nie jest zły tylko że ja chce miec tak jakby "klucz i wartosc" z push'em to tylko wartość będe mieć....


Tak z tablicą w Js nie zrobisz, do tego służą elementy typu Object.

var errors = {};
errors[value] = "twoj error text";
tomi1985
zadziałało smile.gif

czyli klucz => wartość to tylko na obiektach ?

chcialem zrobic tak aby poźniej w html w <span id="statusX"></span> js wiedział w ktorym miejscu wyświetlić jaki błąd także potrzebowałem również klucza dla całośći
werdan
Cytat
zadziałało smile.gif

czyli klucz => wartość to tylko na obiektach ?


Dokładnie. Jesli same wartosci, to mozna pakować do tablicy, a jak klucz => wartosc to obiekty biggrin.gif
tomi1985
hmmm zmieniłem
Kod
var errors = [];

na
Kod
var errors = {};

ale nadal nie wiem jak mogę z automatu przypisywać dwie zmienne ;/

Kod
$.each(tablica, function(key, value){
            if($('input[name='+value+']').val().length > 3){ // if to less lenght then error
                alert($('input[name='+value+']').val());                            
            }else{
                errors[value] = 'proszę podać minimalną ilość znaków';  
            }
            //inputName[value] = $('input[name='+value+']').val(); //przypisanie zmiennych formularza            
        });


jak mam tak :

Kod
var myObject = {
   ' test': 123,
    'some string': 456,
   'bla bla bla': 789
    };


ok fajnie działa ale są to wartości na sztywno przypisane a ja potrzevuje dynamicznie generowane
werdan
Nie kumam. Nie widze tam żadnych dwóch zmiennych.

Dwie zmienne do obiektu:
error[value1] = "text1";
error[value2] = "text2";

Dwie zmienne do 1 elementu:
error[value1] = ["text1", "text2"];
lub jako obiekt:
error[value] = {'value1':'text1', 'value2':'text2'};

tomi1985
Kod
var tablica = new Array (
        'name1',
        'name2'
    );

tu masz jedna a druga to wartosc z inputa

i np.

będzie blad w polu "name2"

to aby

object mial {'name2' : 'wartosc bledu'}
itd...
werdan
  1.  
  2. var tablica = new Array (
  3. 'name1',
  4. 'name2'
  5. );
  6.  
  7. var errors = {};
  8.  
  9. $.each(tablica, function(key, value){
  10.  
  11. errors[value] = 'proszę podać minimalną ilość znaków';
  12.  
  13. });
  14.  
  15.  


Po wykonaniu takiego skryptu powinienes dostac:
errors = {'name1':'proszę podać minimalną ilość znaków', 'name2':'proszę podać minimalną ilość znaków'}


czyli wszystko powinno byc tak jak chcesz.

PS. Nie używaj new Array ('name1', 'name2') lepiej ['name1', 'name2']
tomi1985
Kod
if(isEmpty(errors)){
            $.each(errors, function(key, value){
                alert(key+'-'+value);
            });
        };


a tutaj co mam nie tak... sprawdzałem w manualu i tak się to przecież sprawdza lub:
errors.isEmpty()

?

przepraszam za tak banalne pytania... lecz "kto pyta nie błądzi" smile.gif

znalazłem

Kod
if(jQuery.isEmptyObject(errors)){


wkradł się troche inny problem teraz biggrin.gif

Kod
$(document).ready(function() {
    
    var tablica = [ //name of input
        'name1',
        'name2'
    ];
    
    var inputName   = {};
    var errors      = {};
    
    $('#formChange').submit(function() {      
        $.each(tablica, function(key, value){
            if($('input[name='+value+']').val().length > 3){ // if to more lenght then error
                inputName[value] = $('input[name='+value+']').val();                            
            }else{
                errors[value] = 'proszę podać minimalną ilość znaków';
            }          
        });

        if(jQuery.isEmptyObject(errors)){
            $('#loading').html('<img src="images/loading.gif">').show();
            $('#resultChange').hide();
            //go next step
        }else{
            $.each(errors, function(key, value){
                $('#'+key).css('border','1px solid red').show();
            });
        };
        
        setTimeout(function() {
            $('#resultChange').show();
            $('#loading').hide();
        }, 1000);
        return false; // block load form action      
    });  
});
[/code

[code]
<div id="formChangeAds">
            <span id="loading"></span>
            <div id="resultChange">
                <form id="formChange" action="fds" method="post">
                    <table>
                        <tr>
                            <td><label>name1<input id="name1" type="text" name="name1" /></label></td>
                            <td><label>name2<input type="text" name="name2" /></label><span id="name2"></span></td>
                        </tr>
                        <tr>
                            <td><label>name3<input type="text" name="name3" /></label><span id="name3"></span></td>
                            <td><label>name4<input type="text" name="name4" /></label><span id="name4"></span></td>
                        </tr>
                        <tr>
                            <td><label>name5<input type="text" name="name5" /></label><span id="name5"></span></td>
                            <td><label>name5<input type="text" name="name6" /></label><span id="name6"></span></td>
                        </tr>
                    </table>
                    <input type="submit" value="Zapisz Zmiany" />
                </form>              
            </div>
        </div>


i teraz tak:

jak kliknę "zapisz zmiany"

to funkcja działa tylko jednorazowo... tzn że jak po kliknieciu zmienie dane w inpucie i kliknę znów "zapisz zmiany" to już funkcja nie zadziała... potrzebne jest odświeżenie strony ;/

jak to obejść aby po każdym kliknieciu funkcja się uruchamiała ?


werdan
Musisz wyczyscic obiekty, bo maja stare dane.

Daj jeszcze raz:

var inputName = {};
var errors = {};
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.