Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript]array jquery
tomi1985
post 15.11.2013, 10:09:33
Post #1





Grupa: Zarejestrowani
Postów: 192
Pomógł: 12
Dołączył: 23.09.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post 15.11.2013, 10:17:50
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
tomi1985
post 15.11.2013, 10:26:01
Post #3





Grupa: Zarejestrowani
Postów: 192
Pomógł: 12
Dołączył: 23.09.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 ;/

Ten post edytował tomi1985 15.11.2013, 10:29:30
Go to the top of the page
+Quote Post
werdan
post 15.11.2013, 10:30:41
Post #4





Grupa: Zarejestrowani
Postów: 354
Pomógł: 100
Dołączył: 14.11.2013
Skąd: Płock

Ostrzeżenie: (0%)
-----


  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";
Go to the top of the page
+Quote Post
tomi1985
post 15.11.2013, 10:34:10
Post #5





Grupa: Zarejestrowani
Postów: 192
Pomógł: 12
Dołączył: 23.09.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
werdan
post 15.11.2013, 10:56:03
Post #6





Grupa: Zarejestrowani
Postów: 354
Pomógł: 100
Dołączył: 14.11.2013
Skąd: Płock

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
tomi1985
post 15.11.2013, 10:58:33
Post #7





Grupa: Zarejestrowani
Postów: 192
Pomógł: 12
Dołączył: 23.09.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
werdan
post 15.11.2013, 11:03:12
Post #8





Grupa: Zarejestrowani
Postów: 354
Pomógł: 100
Dołączył: 14.11.2013
Skąd: Płock

Ostrzeżenie: (0%)
-----


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'};

Go to the top of the page
+Quote Post
tomi1985
post 15.11.2013, 11:06:24
Post #9





Grupa: Zarejestrowani
Postów: 192
Pomógł: 12
Dołączył: 23.09.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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...

Ten post edytował tomi1985 15.11.2013, 11:09:15
Go to the top of the page
+Quote Post
werdan
post 15.11.2013, 11:17:22
Post #10





Grupa: Zarejestrowani
Postów: 354
Pomógł: 100
Dołączył: 14.11.2013
Skąd: Płock

Ostrzeżenie: (0%)
-----


  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']
Go to the top of the page
+Quote Post
tomi1985
post 15.11.2013, 12:33:24
Post #11





Grupa: Zarejestrowani
Postów: 192
Pomógł: 12
Dołączył: 23.09.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 ?




Ten post edytował tomi1985 15.11.2013, 11:59:05
Go to the top of the page
+Quote Post
werdan
post 15.11.2013, 19:40:35
Post #12





Grupa: Zarejestrowani
Postów: 354
Pomógł: 100
Dołączył: 14.11.2013
Skąd: Płock

Ostrzeżenie: (0%)
-----


Musisz wyczyscic obiekty, bo maja stare dane.

Daj jeszcze raz:

var inputName = {};
var errors = {};
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.07.2025 - 04:03