[XHTML] Jquery och formulär, hur göra?

Permalänk
Medlem

[XHTML] Jquery och formulär, hur göra?

Hejsan.

Jag håller på med en uppgift i skolan där jag ska skapa ett formulär och lägga in en JQuery-effekt då man skickar iväg informationen. Mitt formulär är väldigt simpelt och jag har lagt in felmeddelanden då man försöker skicka iväg det innan formuläret är färdigfyllt, om det är ett invalid namn, epost etc. Men nu vill jag lägga på en simpel JQuery-effekt på min knapp men har ingen som helst koll på hur jag ska lyckas med det.

Jag inkluderar mitt Jquery-script

<script type="text/javascript"> $(document).ready(function() { var $marginLefty = $('#slidemarginleft div.inner'); $marginLefty.css({ marginLeft: $marginLefty.outerWidth() + 'px', display: 'block' }); $('#slidemarginleft button').click(function() { $marginLefty.animate({ marginLeft: parseInt($marginLefty.css('marginLeft'),10) == 0 ? $marginLefty.outerWidth() : 0 }); }); }); </script>

Mitt formulärscript

<h2> Kontaktformulär</h2> <form name="personal" action="#" onsubmit="return checkscript()"> <p>Namn: <input type="text" size="20" name="name" /></p> <p>E-post: <input type="text" size="20" name="email" /></p> <p>Meddelande: <input type="text" size="20" name="msg" /></p> <p><input type="submit" value="Skicka"/></p> </form> <div class="slide" id="slidemarginleft"> <button>Skicka (jquery)</button> <div class="inner">Din ansökan har kommit in. Tack för din medverkan!</div> </div>

Där är koden till mitt simpla formulär, första knappen är min Submitknapp som reagerar på alla event jag har bundit till den. Den andra är min JQuery-knapp som endast har effekten bunden till sig. Nu vill jag alltså kombinera knapparna men jag är inte van vid JQuery-språket.

Skulle vara tacksam om någon kunde hjälpa mig.

Mitt Javascript som jag har i en enskild fil som jag kallar på

function checkscript() { emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/; alphaExp = /^[a-zA-Z ]+$/; namnet = document.personal.name.value; epost = document.personal.email.value; meddelande = document.personal.msg.value; if (namnet == "") { alert('namnet är tomt'); return false; } else if (alphaExp.test(namnet) == false) { alert('Namnet får inte innehålla siffror eller tecken!'); return false; } else if (epost == "") { alert('E-posten är tom'); return false; } else if (emailExp.test(epost) == false) { alert('E-posten är ogiltig'); return false; } else if (meddelande == "") { alert('Du skrev inget meddelande'); return false; } else if (meddelande != "") { alert('Vi har mottagit din ansökan!'); return false; } return true; }

Permalänk
Medlem
Skrivet av Snorfisk:

Där är koden till mitt simpla formulär, första knappen är min Submitknapp som reagerar på alla event jag har bundit till den. Den andra är min JQuery-knapp som endast har effekten bunden till sig. Nu vill jag alltså kombinera knapparna men jag är inte van vid JQuery-språket.

Skulle vara tacksam om någon kunde hjälpa mig.

Mitt Javascript som jag har i en enskild fil som jag kallar på[/CODE]

Din jquery-kod fungerar, det har jag testat själv.

Det enda du behöver är att stoppa in din div i ditt formulär och byta ut din button mot submit-knappen.
I din checkscript() så borde du göra effekten då det är när formuläret är godkänt och skickas som effekterna skall göras(?). Du behöver alltså inte koppla på en click()-event på din knapp. checkscript()-metoden borde göra effekterna.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Skrivet av Leedow:

Din jquery-kod fungerar, det har jag testat själv.

Det enda du behöver är att stoppa in din div i ditt formulär och byta ut din button mot submit-knappen.
I din checkscript() så borde du göra effekten då det är när formuläret är godkänt och skickas som effekterna skall göras(?). Du behöver alltså inte koppla på en click()-event på din knapp. checkscript()-metoden borde göra effekterna.

Tack för svar!

Men jag förstår inte riktigt hur du menar, ska jag gå in i min checkscript-fil och lägga till ett kommando som utför min Jquery? Det den gör nu, då jag satt in Jqueryn in i formuläret, är att den bara dyker upp då jag tryckt på knappen. Den åker inte in med effekten.

Permalänk
Medlem
Skrivet av Snorfisk:

Tack för svar!

Men jag förstår inte riktigt hur du menar, ska jag gå in i min checkscript-fil och lägga till ett kommando som utför min Jquery? Det den gör nu, då jag satt in Jqueryn in i formuläret, är att den bara dyker upp då jag tryckt på knappen. Den åker inte in med effekten.

Vad det ser ut som är att du har två knappar. En för att skicka in formuläret och en knapp bara för att testa lite jQuery-kod. Stämmer det?

Ja, du kan kalla på en metod som utför jQuery-stylingen separat om du vill.

Det jag menar är att om du byter ut din "jQuery-knapp" mot din riktiga submit-knapp så har du ju praktiskt taget redan satt dit .click()-event då det är det som inträffar när formuläret skall skickas "onsubmit".
Om du då placerar din jQuery-kod i din metod, som inträffar när du skickar formuläret, så är du hemma.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Skrivet av Leedow:

Vad det ser ut som är att du har två knappar. En för att skicka in formuläret och en knapp bara för att testa lite jQuery-kod. Stämmer det?

Ja, du kan kalla på en metod som utför jQuery-stylingen separat om du vill.

Det jag menar är att om du byter ut din "jQuery-knapp" mot din riktiga submit-knapp så har du ju praktiskt taget redan satt dit .click()-event då det är det som inträffar när formuläret skall skickas "onsubmit".
Om du då placerar din jQuery-kod i din metod, som inträffar när du skickar formuläret, så är du hemma.

Tack igen!

Det jag har gjort nu är att jag:

1) lagt in min Jquery kod i min javascript-fil så att det aktiveras endast om formuläret är helt ifyllt

else if (meddelande != "") { $(document).ready(function() { var $marginLefty = $('#slidemarginleft div.inner'); $marginLefty.css({ marginLeft: $marginLefty.outerWidth() + 'px', display: 'block' }); $('#slidemarginleft button').click(function() { $marginLefty.animate({ marginLeft: parseInt($marginLefty.css('marginLeft'),10) == 0 ? $marginLefty.outerWidth() : 0 }); }); }); } return false;

2) lagt in min Jquery-knapp i formuläret så att det är den ända knappen

<form name="personal" id="formular" action="#" onsubmit="return checkscript()"> <p>Namn: <input type="text" size="20" name="name" /></p> <p>E-post: <input type="text" size="20" name="email" /></p> <p>Meddelande: <input type="text" size="20" name="msg" /></p> <div class="slide" id="slidemarginleft"> <button>Skicka</button> <div class="inner">Din ansökan har kommit in. Tack för din medverkan!</div> </div> </form>

Nu fungerar det NÄSTAN. Problemet är det att när jag trycker på min skicka-knapp så händer det inget förrän ANDRA gången jag klickar. Jag gissar på att det har nånting med att mitt script endast aktiveras vid slutet av mitt javascript, men det körs inte för att det inte blivit tillsagt(?)

Men jag kanske uppfattade nåfonting fel?

Permalänk
Medlem

om du tar bort raden med $(document).ready(function() { och en av }); så kanske det funkar bättre.

$(document).ready() är en funktion som används för att exempelvis binda funktioner till events när sidan har renderats klart av browsern.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

om du tar bort raden med $(document).ready(function() { och en av }); så kanske det funkar bättre.

$(document).ready() är en funktion som används för att exempelvis binda funktioner till events när sidan har renderats klart av browsern.

Jag testade ta bort den men utan resultat.

Permalänk
Medlem

hoppsan. läste nog inte riktigt scriptet.
du får nog ha kvar lite av koden inom ett $(document).ready() block och sedan ska nog ditt "checkscript" se ut ungefär såhär:

$(document).ready(function(){ // Detta körs ju när document är laddat. var $marginLefty = $('#slidemarginleft div.inner'); $marginLefty.css({ marginLeft: $marginLefty.outerWidth() + 'px', display: 'block' }); }); [...] else if (meddelande != "") { // Här vill du ju göra jobbet som skall göras om formuläret är korrekt ifyllt var $marginLefty = $('#slidemarginleft div.inner'); $('#slidemarginleft div.inner').animate({ marginLeft: parseInt($marginLefty.css('marginLeft'),10) == 0 ? $marginLefty.outerWidth() : 0 }); return false; // Ska inte formuläret skickas?! return true isf... }

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

hoppsan. läste nog inte riktigt scriptet.
du får nog ha kvar lite av koden inom ett $(document).ready() block och sedan ska nog ditt "checkscript" se ut ungefär såhär:

$(document).ready(function(){ // Detta körs ju när document är laddat. var $marginLefty = $('#slidemarginleft div.inner'); $marginLefty.css({ marginLeft: $marginLefty.outerWidth() + 'px', display: 'block' }); }); [...] else if (meddelande != "") { // Här vill du ju göra jobbet som skall göras om formuläret är korrekt ifyllt var $marginLefty = $('#slidemarginleft div.inner'); $('#slidemarginleft div.inner').animate({ marginLeft: parseInt($marginLefty.css('marginLeft'),10) == 0 ? $marginLefty.outerWidth() : 0 }); return false; // Ska inte formuläret skickas?! return true isf... }

Tack för svar!

Nu fungerar mitt script! men nu har jag ett litet problem som jag inte är säker på om det kommer räknas som ett fel då jag lämnar in uppgiften. Det är att om jag returnerar True efteråt så visas inte effekten.

Som det ser ut nu så spelas effekten endast då jag skrivit in all information korrekt, jag behöver inte klicka flera gånger heller. Men texten informationen kvarstår i rutorna eftersom jag returnerar false. Returnerar jag True så försvinner all text MEN effekten spelas inte.

Permalänk
Medlem

det beror ju på vad det hela går ut på. returnerar du false, så kommer ju inte informationen att skickas någonstans (om man inte gör det via ajax).

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem

Det ska gå ut på att den ska skickas iväg "på låtsas", jag tror det skulle vara godkänt att skicka in det så som det är nu, men man vill ju gärna att informationen ska försvinna för att det ska kännas mer trovärdigt.

Permalänk
Medlem

bara ett litet tips.
istället för att göra en if-sats av en så kort sak som:

if(namnet = '') { return false; }

så kan du istället göra:

return (namnet == '') ? false : true;

detta gör alltså exakt samma som första kodsnutten.

man kan läsa det som: returnera om namnet är såhär -> falskt annars sant.