Jump to content



Java...scripting


theoamd

Recommended Posts

Δημοσιεύτηκε

Για να μην τα πολυλογώ έχω τον παρακάτω κώδικα

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-7" />
<title>Form Validation</title>

<script type="text/javascript">
function formValidator(){
err="";
var name=document.getElementById('name');
if(nameValidator(name,"Please enter a valid name")){
//return true;
}

var address=document.getElementById('address');
if(addrValidator(address,"Please enter a valid address")){
//return true;
}

var zip=document.getElementById('zip');
if(zipValidator(zip,"Please enter a valid Zip Code")){
//return true;
}

var user=document.getElementById('user');
if(userValidator(user,"Not valid username")){
//return true;
}

var email=document.getElementById('email');
if(emailValidator(email,"Please enter a valid email address")){
//return true;
}

return false;
}

function nameValidator(name, nmsg)
{
var nameexp= /^[a-zA-Z]{6,15}$/;
if(name.value.match(nameexp)){
return true;}
else{
alert(nmsg);
name.select();
return false;
}
}

function addrValidator(address,amsg)
{
var addressexp= /^[a-zA-Z]{3,12} [a-zA-Z]{3,15} [0-9]{1,3}$/;
if (address.value.match(addressexp)){
return true;
}
else{
alert(amsg);
address.select();
return false;}
}

function zipValidator(zip,zmsg)
{
var zipexp= /^[0-9]{1,5}$/;
if (zip.value.match(zipexp)){
return true;
}
else{
alert(zmsg);
zip.select();
return false;}
}

function userValidator(user,umsg)
{
var userexp= /^[a-zA-Z]{6,8}$/;
if (user.value.match(userexp)){
return true;
}
else{
alert(umsg);
user.select();
return false;}
}


function emailValidator(email, msg)
{
var emailexp= /^[a-zA-z0-9\.\+\-]+@[a-zA-Z0-9\.\-]+\.[a-zA-Z0-9]{2,4}$/;

if (email.value.match(emailexp)){
return true;
}else{
alert(msg);
email.select();
return false;

}
}




</script>
<h1>2η άσκηση</h2>
<form method="post" action="get.php">
First name: <input type="text" id='name'>
<br/>Address: <input type="text" id='address'>
</br>Zip Code: <input type="text" id='zip'>
<br/>
State:
<select name="state" value="Please choose">
<option value="000" selected="selected">Please choose:</option>
<option value="6">Greece</option>
<option value="5">Germany</option>
<option value="4">Greenland</option>
</select>
<br/>Username(6-8 characters):<input type="text" id='user'>
<br/>Email:<input type="text" id='email'>
<br/>
<input type='button' onclick="return formValidator()" value="Check form"/>

</form>

</p>

</body>
</html>

και η ερώτησή μου είναι γιατί βάζοντας έγκυρα στοιχεία δεν με ανακατευθύνει στο get.php(πρόκειται για ένα απλό αρχείο php που εμφανίζει μήνυμα επιτυχούς εισαγωγής στοιχείων)

όχι στο on click το validation αλλά στο onsubmit της φόρμας

onsubmit="formValidator(this);"

Με onsubmit θέλει και type="submit" που πάει να πει πως ακόμη και κενή να αφήσω τη φόρμα πατώντας submit θα με πάει στο get.php

και η ερώτησή μου είναι γιατί βάζοντας έγκυρα στοιχεία δεν με ανακατευθύνει στο get.php(πρόκειται για ένα απλό αρχείο php που εμφανίζει μήνυμα επιτυχούς εισαγωγής στοιχείων)

Με μια γρήγορη ματιά, νομίζω ότι δε γυρνάς πουθενά true, οπότε το submit δεν εκτελείται ποτέ.

Edit:

Είχα κι ένα πρόχειρο κοντά μου... Οι έλεγχοι γίνονται με jquery.


function formCheck() {
var formOK = true;

if ($("#my_text_field").val() == "") {
$.StErrorPopup.buildPrompt($("#my_text_field"), "Please enter a value.")
if (formOK) { scrollToElement("#my_text_field"); }
formOK = false;
}
return formOK;
}

Τελικά επρόκειτο για λογικό λάθος.

Στη formValidator, έπειτα από κάθε έλεγχο πρέπει να επιστρέφω false, οπότε αν χτυπήσει κάπου, να πεταχτεί το μήνυμα και να μην πάει παρακάτω και πριν το τέλος της συνάρτησης, έπρεπε να επιστρέψω true, καθώε επρόκειτο για σημείο στο οποίο θα φτάσει ΜΟΝΟ αν όλοι οι παραπάνω έλεγχοι είναι αληθείς.

9enx anyway παίδες ( [MENTION=173]Wizard![/MENTION] είμαι σε πολύ πρόιμο στάδιο για jqueries).

Next step ==> Javascript + Ajax :getlost:

[MENTION=173]Wizard![/MENTION] είμαι σε πολύ πρόιμο στάδιο για jqueries

Μάλλον θα σε διευκολύνει. Δες το σαν εργαλείο :)

Το νέο ερώτημα λοιπόν είναι το ακόλουθο :

Έχω μια εφαρμογή αναζήτησης κάποιων διαθέσιμων βιβλίων(τα οποία τα τραβάω απο μια ΒΔ), όπου υπάρχει ένα txt hint το οποίο κατά την πληκτρολόγηση στην αναζήτηση εμφανίζει τα αντίστοιχα υπάρχοντα στη βάση.

Για ένα πεδίο παίζει κανονικά(πχ για τίτλο), όμως αν προσθέσω και συγγραφέα(δηλαδή αναζήτηση με ajax(για το txt hint) και κάνω παράλληλη αναζήτηση το txt hint δε δουλεύει σωστα,δηλαδή υπάρχει περίπτωση να βγάλει 2 φορές το ίδιο βιβλίο.

Πως θα διορθωθεί αυτό?

Εννοείς ότι ψάχνεις στη βάση αν το txt υπάρχει στο πεδίο title ή στο πεδίο author;

Μήπως κάνεις κάποιο Union στα queries; Αν ναι, βάλε Distinct.

Ουσιαστικά παίρνω μέσω js(και κάνοντας χρήση της onkeyup()) το περιεχόμενο του field(πχ τον τίτλο ενός βιβλίου) και ελέγχω αν υπάρχει κάτι αντίστοιχο στη βάση

Ναι, αυτό το κατάλαβα. Αυτό που δεν ξέρω είναι, σου έρχεται διπλό από τη βάση, ή το γράφει διπλό η js ρουτίνα σου;

btw, δοκίμασε το autocomplete με jquery ;)

(υπάρχει περίπτωση που έρχεται διπλό, άλλη που έρχεται λάθος -πχ να πατήσω "L" και να επιστρέψει βιβλίο με εναρκτήριο γράμμα τίτλου "H" , κοκ)

xammp, οπότε είναι φτιαγμένη σε phpmyadmin(και κανονικοποιημένη)

το εργαλείο που παραθέτεις είναι για web debugging?

Ναι. Σου δείχνει τι στέλνει και τι παίρνει ο browser. Οπότε, ότι δεδομένα έρχονται στο ajax μέσω webservice/webpage θα τα δεις ανοικτά.

Σαν να ψιλοκατάλαβα, αλλά μήπως μπορείς να γίνεις λίγο πιο συγκεκριμένος?

ΥΓ: μέχρι στιγμής βρήκα τρόπο να δουλεύει και για 3 πεδία, αλλά οχι παράλληλα(πχ αν έχω τίτλο "αβγ" και συγγραφέα "δεζ", δουλεύει αν έχω δώσει το "αβγ" σαν τίτλο και πχ κάνω keyup στο "δ" στο πεδίο του συγγραφέα,αλλά δεν δουλεύει αν το αφήσω σαν "αβ" πχ το πεδίο του τίτλου και πχ "δ" το πεδίο του συγγραφέα)

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.