Jquery popup sluit te vroeg
beste forumleden,
ik loop vast met een stukje jquery. als je op een link klikt dan open zich een popup div waarin ik een formulier include, tot hier geen problemen. alleen wanneer ik het formulier verzend dan sluit hij de popup div. Het formulier geeft een melding van verzonden of niet verzonden en deze zie je wanneer je weer op de link klikt om de popup te openen.
Mijn vraag is dus als volgt:
Hoe kan ik zorgen dat de popup alleen maar sluit wanneer ik op het kruisje klik en niet wanneer het formulier is verzonden?
hier de code:
ik loop vast met een stukje jquery. als je op een link klikt dan open zich een popup div waarin ik een formulier include, tot hier geen problemen. alleen wanneer ik het formulier verzend dan sluit hij de popup div. Het formulier geeft een melding van verzonden of niet verzonden en deze zie je wanneer je weer op de link klikt om de popup te openen.
Mijn vraag is dus als volgt:
Hoe kan ik zorgen dat de popup alleen maar sluit wanneer ik op het kruisje klik en niet wanneer het formulier is verzonden?
hier de code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//SETTING UP OUR POPUP
//0 means disabled; 1 means enabled;
var popupStatus = 0;
//loading popup with jQuery magic!
function loadPopup(){
//loads popup only if it is disabled
if(popupStatus==0){
$("#backgroundPopup").css({
"opacity": "0.7"
});
$("#backgroundPopup").fadeIn("slow");
$("#popupContact").fadeIn("slow");
popupStatus = 1;
}
}
//disabling popup with jQuery magic!
function disablePopup(){
//disables popup only if it is enabled
if(popupStatus==1){
$("#backgroundPopup").fadeOut("slow");
$("#popupContact").fadeOut("slow");
popupStatus = 0;
}
}
//centering popup
function centerPopup(){
//request data for centering
var windowWidth = document.documentElement.clientWidth;
var windowHeight = document.documentElement.clientHeight;
var popupHeight = $("#popupContact").height();
var popupWidth = $("#popupContact").width();
//centering
$("#popupContact").css({
"position": "absolute",
"top": windowHeight/2-popupHeight/2,
"left": windowWidth/2-popupWidth/2
});
//only need force for IE6
$("#backgroundPopup").css({
"height": windowHeight
});
}
//CONTROLLING EVENTS IN jQuery
$(document).ready(function(){
//LOADING POPUP
//Click the button event!
$("#button").click(function(){
//centering with css
centerPopup();
//load popup
loadPopup();
});
//CLOSING POPUP
//Click the x event!
$("#popupContactClose").click(function(){
disablePopup();
});
//Click out event!
$("#backgroundPopup").click(function(){
disablePopup();
});
//Press Escape event!
$(document).keypress(function(e){
if(e.keyCode==27 && popupStatus==1){
disablePopup();
}
});
});
//0 means disabled; 1 means enabled;
var popupStatus = 0;
//loading popup with jQuery magic!
function loadPopup(){
//loads popup only if it is disabled
if(popupStatus==0){
$("#backgroundPopup").css({
"opacity": "0.7"
});
$("#backgroundPopup").fadeIn("slow");
$("#popupContact").fadeIn("slow");
popupStatus = 1;
}
}
//disabling popup with jQuery magic!
function disablePopup(){
//disables popup only if it is enabled
if(popupStatus==1){
$("#backgroundPopup").fadeOut("slow");
$("#popupContact").fadeOut("slow");
popupStatus = 0;
}
}
//centering popup
function centerPopup(){
//request data for centering
var windowWidth = document.documentElement.clientWidth;
var windowHeight = document.documentElement.clientHeight;
var popupHeight = $("#popupContact").height();
var popupWidth = $("#popupContact").width();
//centering
$("#popupContact").css({
"position": "absolute",
"top": windowHeight/2-popupHeight/2,
"left": windowWidth/2-popupWidth/2
});
//only need force for IE6
$("#backgroundPopup").css({
"height": windowHeight
});
}
//CONTROLLING EVENTS IN jQuery
$(document).ready(function(){
//LOADING POPUP
//Click the button event!
$("#button").click(function(){
//centering with css
centerPopup();
//load popup
loadPopup();
});
//CLOSING POPUP
//Click the x event!
$("#popupContactClose").click(function(){
disablePopup();
});
//Click out event!
$("#backgroundPopup").click(function(){
disablePopup();
});
//Press Escape event!
$(document).keypress(function(e){
if(e.keyCode==27 && popupStatus==1){
disablePopup();
}
});
});
Dat staat niet in dit stukje code.
Er moet meer zijn. Geef je formulier eens en het liefst een online voorbeeld.
Er moet meer zijn. Geef je formulier eens en het liefst een online voorbeeld.
een online voorbeeld is hier te vinden
ik wilde niet te veel code hier plaatsen omdat het meeste niet relevant is voor de vraag.
ik wilde niet te veel code hier plaatsen omdat het meeste niet relevant is voor de vraag.
Waarom gebruik je niet gewoon bijvoorbeeld fancybox?
ik vond het wel leuk om deze te gebruiken en niet verder gekeken.
Ik wil eigenlijk deze popup blijven gebruiken als de fout eruit gaat
Ik wil eigenlijk deze popup blijven gebruiken als de fout eruit gaat
Er gaat trouwns ook wat fout in je broncode.
Open je website, druk op CTRL + U.
En dan zie je dit:
<php
?>
<!DOCTYPE html>
<html>
<head>
Lijkt me niet de bedoeling ;).
Maar... de oorzaak is eigenlijk heel simpel:
Dit is je formulier:
Dus bij 'verzenden' gaat hij naar dezelfde pagina (en ververst hij dus).
Wat jij wilt is dat Javascript de verzendknop uitschakeld (return false;) en dan via AJAX toch verstuurd oid.
Open je website, druk op CTRL + U.
En dan zie je dit:
<php
?>
<!DOCTYPE html>
<html>
<head>
Lijkt me niet de bedoeling ;).
Maar... de oorzaak is eigenlijk heel simpel:
Dit is je formulier:
Dus bij 'verzenden' gaat hij naar dezelfde pagina (en ververst hij dus).
Wat jij wilt is dat Javascript de verzendknop uitschakeld (return false;) en dan via AJAX toch verstuurd oid.
Gewijzigd op 31/07/2012 12:42:28 door Eddy E
Ik heb het html gedeelte verbeterd. Maar iemand een idee hoe ik het oplos met de popup?
Zie verschillende keren disablePopup(); staan.
Daar al eens wat mee 'getest'?
Daar al eens wat mee 'getest'?
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
//Post return php in popupscreen
jQuery('#popupContact').submit(function() {
jQuery.ajax({
type: "POST",
url: "contact.php",
success: function() {loadPopup();}
});
});
jQuery('#popupContact').submit(function() {
jQuery.ajax({
type: "POST",
url: "contact.php",
success: function() {loadPopup();}
});
});
ik heb nu dit toegevoegd aan mijn js bestand maar helaas werkt dit niet
iemand een idee hoe ik de respons van het phpformulier opvang?
Is er iets van javascript dat werkt?
Mijn developer tools zeggen me dat je jQuery bestand corrupt is.
Kan je dit:
http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js
vervangen door dit:
https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
en eens zien of dit iets verandert?
Mijn developer tools zeggen me dat je jQuery bestand corrupt is.
Kan je dit:
http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js
vervangen door dit:
https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
en eens zien of dit iets verandert?
Zeker doen.
Hoe 'nieuwer' hoe beter. Wellicht zat .ajax() nog niet in 1.2.6
Hoe 'nieuwer' hoe beter. Wellicht zat .ajax() nog niet in 1.2.6
kris ik heb het aangepast. dank je voor het vermelden
ik heb nu de code veranderd en deze werkt in IE en in Chrome maar niet in firefox. Dit vind ik raar om dat jquery in alle browsers hetzelfde moet werken
ik hoop dat jullie kunnen kijken waar de fout zit voor firefox.
ik heb nu de code veranderd en deze werkt in IE en in Chrome maar niet in firefox. Dit vind ik raar om dat jquery in alle browsers hetzelfde moet werken
ik hoop dat jullie kunnen kijken waar de fout zit voor firefox.
Een ander probleem is ook na een post het sluiten van de div niet meer werkt met de X. Met de escape toets en naast de div klikken werkt wel gewoon.. Iemand een idee
Vervang
door
Op deze manier koppel je een click event listener aan #popupContact (deze div blijft altijd bestaan), die wacht op een klik van de gebruiker op #popupContactClose. Op dit moment wordt de inhoud van je #popupContact geleegd door de ajax call, waarna #popupContactClose opnieuw wordt aangemaakt. De eerdere event listener ziet dit echter niet als dezelfde link en werkt dan niet meer.
door
Op deze manier koppel je een click event listener aan #popupContact (deze div blijft altijd bestaan), die wacht op een klik van de gebruiker op #popupContactClose. Op dit moment wordt de inhoud van je #popupContact geleegd door de ajax call, waarna #popupContactClose opnieuw wordt aangemaakt. De eerdere event listener ziet dit echter niet als dezelfde link en werkt dan niet meer.
Gewijzigd op 03/08/2012 20:12:40 door Jurgen B
bedankt jurgen het werkt inderdaad ook bedankt voor je uitleg.
het probleem met firefox is ook opgelost. Zonder iets aan de code te hebben veranderd.
hopelijk de laatste vraag.
de popup blijft na de eerste keer submit gewoon open en hij geeft de respons
maar een tweede keer dan sluit de popup alsnog.
dit kun je testen door gelijk op submit te drukken en dan nog eens een keer
het probleem met firefox is ook opgelost. Zonder iets aan de code te hebben veranderd.
hopelijk de laatste vraag.
de popup blijft na de eerste keer submit gewoon open en hij geeft de respons
maar een tweede keer dan sluit de popup alsnog.
dit kun je testen door gelijk op submit te drukken en dan nog eens een keer
Blijkbaar krijg je in de return van je AJAX call geen formulier naam terug. Het formulier is naamloos na het doen van een submit, waardoor de event handler niet meer werkt. Waarom hij dan exact terugspringt naar gewoon scherm weet ik zo even niet, maar kijk iig eens naar je formulier id die je terug krijgt in de AJAX call, die mist namelijk!
je hebt gelijk ik heb het veranderd maar het veranderd gek genoeg niets
Tijd om er een truuk er op loslaten.
<form>
//bla
//bla
<input type="submit" value="Blablablahh" onclick="window.close()">
</form>
Geheid dat wel werkt.
<form>
//bla
//bla
<input type="submit" value="Blablablahh" onclick="window.close()">
</form>
Geheid dat wel werkt.
Gewijzigd op 05/08/2012 04:39:21 door Yoop Overmaat
Je hebt daar eigenlijk hetzelfde probleem als met de close knop. Je form wordt opnieuw geladen dus de event handler reageert niet op het nieuwe formulier. Je kan dit oplossen door eveneens on() te gebruiken (maar nu op de submit knop zelf), en in de callback het formulier te submitten ($('#contactForm').submit()), of door alleen de inhoud van het formulier via ajax te verwerken in plaats van het complete formulier opnieuw op te halen.
Dus in eerste geval iets als (niet getest, maar dit zou moeten werken...)
Dus in eerste geval iets als (niet getest, maar dit zou moeten werken...)
Gewijzigd op 05/08/2012 12:57:22 door Jurgen B
hey jurgen bedankt dit werkt het formulier blijft staan alleen hij krijgt nu niet de waardes van het php bestand terug. dus heb je een naam ingevuld dan onthield hij deze eerst en nu krijg je een textbox terug.
maar tot nu toe heel erg bedankt voor je hulp
maar tot nu toe heel erg bedankt voor je hulp
Ehm vreemd.. Heb niet veel ervaring m.b.t Ajax icm JQuery icm formulieren. Als hij eerst wel werkte neem ik aan dat het script dus wel het juiste form teruggeeft, maar het lijkt erop dat hij dus geen waardes meer meegestuurd krijgt...
Het zit hem in 'data: $(this).serialize()' omdat $(this) nu naar #popupContact verwijst in plaats van het formulier. Je moet $(this) naar $('#contactForm') wijzigen, dan lijkt het hier te werken.
Het zit hem in 'data: $(this).serialize()' omdat $(this) nu naar #popupContact verwijst in plaats van het formulier. Je moet $(this) naar $('#contactForm') wijzigen, dan lijkt het hier te werken.
Gewijzigd op 05/08/2012 15:08:33 door Jurgen B




