πρόβλημα με την οργάνωση του κώδικα

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

πρόβλημα με την οργάνωση του κώδικα

Δημοσίευση από Serghio » 30 Σεπ 2013 20:21

Mε τον παρακάτω κώδικα τσεκάρω αν το email που πάει να βάλει ο χρήστης στα profile settings του υπάρχει ήδη στην βάση...ανήκει σε άλλο χρήστη δηλαδή-αυτός ο κώδικας τίθεται σε ισχύ μόλις ο χρήστης αρχίζει να πληκτρολογεί στο αντίστοιχο πεδίο(onkeyup):

Κώδικας: Επιλογή όλων

$("#email").keyup(function(){
if($(this).valid())
    {var email=$("input#email").val();
         $.ajax({
               type: "POST",
               url: "ajaxcheckemail.php",
               data: {"email":email},
               success:function(data){
               if (data==0)
               {   proceed=0;
               $('.OK').remove();
                   $('#emailexists').html("Yπάρχει ήδη τέτοιο email καταχωρημένο!!!");
               }
               else if(data==1)
               {   proceed=1;
                $('#emailexists').html(null);
               }
                   },
               error:function(jxhr){ 
               alert(jxhr.responseText);}
               }); 
    }


});
To πρόβλημα έχει να κάνει με την global variable proceed.O λόγος που την χρησιμοποιώ;
Δείτε και αυτόν τον κώδικα-ο οποίος τίθεται σε ισχύ όταν ο χρήστης πατήσει το submit button:

Κώδικας: Επιλογή όλων

$('#savecontact').click(function() {
   event.preventDefault(); 

     if ($('#formall').valid()&&(proceed===1)) //εδώ είναι το πρόβλημα
     
    {//και αν το email δεν είναι το ίδιο με άλλο στην βάση
         phone=$("input#phone").val();
         email=$("input#email").val();
          $.ajax({
               type: "POST",
               url: "contajax.php",
               data: {"phone":phone,"email":email},
               success:function(data){
               if (data==0)
               {$('#contacterror').html("Exουμε πρόβλημα!!!");}
               else if((data==30)||(data==2))//αυτό σημαίνει ότι υπάρχει ίδιο email σρην βάση
               {$('#emailexists').html("Yπάρχει ήδη τέτοιο email καταχωρημένο!!!");
               }
               
               },
               error:function(jxhr){ 
               alert(jxhr.responseText);}
               });
               closecontact();
    } else { 
         return false;    
    } 
});
Μην δίνεται σημασία σε όλο τον κώδικα και εστιάστε στην γραμμή

Κώδικας: Επιλογή όλων

 if ($('#formall').valid()&&(proceed===1)) 
Το παραπάνω λέει στην ουσία ότι αν το email που έχει βάλει ο χρήστης ΔΕΝ υπάρχει στην βάση τότε γίνεται το σχετικό update της βάσης.To θέμα όμως είναι ότι αν ο χρήστης δεν επιχειρήσει αλλαγή του e-mail αλλά μόνο του τηλεφώνου(συμπεριλαμβάνεται στο ίδιο fieldset της φόρμας) το update δεν προχωρά γιατί λαμβάνω σφάλμα ότι η proceed είναι undefined, λογικό αφού αυτή τίθεται ΜΟΝΟ όταν ο χρήστης πάει να αλλάξει και το email.

Πως μπορώ να οργανώσω τον κώδικα καλύτερα εδώ; Το ψάχνω και μόνος μου αλλά απλώς ψάχνω και μια πιο έμπειρη άποψη...ελπίζω το πρόβλημα να έγινε σαφές.

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

πρόβλημα με την οργάνωση του κώδικα

Δημοσίευση από alou » 30 Σεπ 2013 23:42

html

Κώδικας: Επιλογή όλων

<fieldset class="fieldsetalfa">
<input data-originalvalue="abcd" type="text" name="email" value="defg">
...

<input type="button" id="fieldsetalfa" class="fieldsetsave" value="Save & Continue">
</fieldset>

jquery

Κώδικας: Επιλογή όλων

$&#40;'.fieldsetsave'&#41;.click&#40;function&#40;&#41; &#123;
   var thisfieldset = $&#40;this&#41;.attr&#40;'id'&#41;;
  $.each&#40;'.' + thisfiledset + 'input', function&#40;&#41; &#123;
   if &#40;$&#40;this&#41;.val&#40;&#41; != $&#40;this&#41;.data&#40;'originalvalue&#41;&#41; &#123;
     $&#40;this&#41;.addClass&#40;'toSubmit'&#41;;
   &#125;
   &#125;&#41;  //με το πιο πανω, σημαδεύεις μόνο ότι έχει αλλάξει από την αρχική τιμή
     var jsonToSend = $&#40;'.' + thisfieldset + ' .toSumbit'&#41;.serialize&#40;&#41;;
    //και πακετάρεις το jsonToSend για να στείλεις
   ...
Από εκεί και πέρα, τσεκάρεις τι είναι να φύγει. Αν φύγει email επειδή άλλαξε, ζητάς και το proceed

Κώδικας: Επιλογή όλων

if &#40; $&#40;'input.email'&#41;.hasClass&#40;'toSumbit'&#41; && proceed !== 1&#41; &#123;
 alert&#40;"To email iparxei, bale allo"&#41;;
&#125; else &#123;
...
&#125; if &#40;validation checks&#41;...

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

πρόβλημα με την οργάνωση του κώδικα

Δημοσίευση από Serghio » 01 Οκτ 2013 11:30

υπάρχει τρόπος να γίνει η δουλειά χωρίς το serialize;
Είναι απαραίτητο δηλαδή;

Θα πρέπει να αλλάξω πολύ κώδικα.

Στο παρακάτω κάτι ξέχασες μάλλον:

Κώδικας: Επιλογή όλων

  $.each&#40;'.' 
Τι θα βάλω μεταξύ του δολαρίου και του each;

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

πρόβλημα με την οργάνωση του κώδικα

Δημοσίευση από alou » 01 Οκτ 2013 14:10

Ιδέες σου λέω που αν σε ενδιαφέρει ενσωματώνεις, μην προσπαθείς να κάνεις copy paste. Το each δεν είναι λάθος, μια χαρά λειτουργεί και έτσι (κάνει wrap το στοιχείο που θα πεις σε jquery object, όπως και με το $(element).each(.... )

Αν δε θες serialize, ξεχώρισε ένα ένα τα στοιχεία που θες να στείλεις και ονόμασέ τα, όπως έκανες πριν,

var tade = $(...

και
data: { ... }


με τη διαφορά ότι θα διαλέγεις μόνο αυτά που έχουν class toSubmit

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

πρόβλημα με την οργάνωση του κώδικα

Δημοσίευση από Serghio » 01 Οκτ 2013 15:22

alou έγραψε:Ιδέες σου λέω ....

Δικιο έχεις

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

πρόβλημα με την οργάνωση του κώδικα

Δημοσίευση από Serghio » 01 Οκτ 2013 20:01

μια ερώτηση σχετική και μη με το topic.

Aυτός, ο κώδικας όπως βλεπετε αφορά και το "ψάξιμο" στην βάση αν το καινούργιο email που πάει να βάλει ο χρήστης στο προφίλ του χρησιμοποιείται ήδη.

Υπάρχει δηλαδή server-side δραστηριότητα,και αυτή συμβαίνει onkeyp.

Mιας και είμαι στην φάση που κάνω το server-side validation θα ήθελα να ρωτήσω αν έχει νόημα το ψάξιμο στην βάση που γίνεται για τον παραπάνω λόγο να γίνεται και όταν ο χρήστης πατήσει το submit button.

Tι προτείνετε;

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες