Проблем при изпращане на форма.

tedo96

Registered
Здравейте,
Имам форма с id="comments_form".
Чрез този код целя когато формата се субмитне да се покаже съобщение и след няколко секунди страницата да се презареди.
[js] jQuery("form#comments_form").submit(function() {
if(validateForm()){
jQuery('#comments_form').slideUp('slow', function(){
jQuery(this).html("<div id='confirmation'></div>");
jQuery('#confirmation').html("<h4>Коментарът е добавен успешно!</h4>")
.append("<p>Благодарим Ви за изказаното мнение.</p>");
Cufon.refresh();
jQuery(this).slideDown('slow');
setInterval("location.reload();",3000);
})
}
return false;
});[/js]
Окей, показва се съобщението, но заявката към базата данни не се изпраща. От къде идва проблема? Когато махна id-то на формата информацията се записва без никакъв проблем.
 
Проблема идва от return false;
Щом в onsubmit-a има return false; формата не се изпраща.

Само не разбрах: Имаш 1 форма ,щом цъкнеш submit се показва съобщение и чак след 3 секунди се изпраща формата,правилно ли разбрах?
 
vik96 каза:
Проблема идва от return false;
Щом в onsubmit-a има return false; формата не се изпраща.

Само не разбрах: Имаш 1 форма ,щом цъкнеш submit се показва съобщение и чак след 3 секунди се изпраща формата,правилно ли разбрах?
Здрасти,
целта ми е след като се субмитне формата да се покаже прозорчето и след 3 секунди страницата да се рефрешне и коментара вече да си е добавен.
 
Ще ти предложа варианта в който ползвам в albatrossbg:

Когато въведеш коментар ,текста се добавя в div-a ,а с ajax изпращаш съобщението.
Така спестяваш рефреш и изглежда по-яко.

Идеята ми е следната :
HTML:
<div id="statiq">
pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,pesho s klimatika ,
</div>

<div> 
           ?????: <input type="text" id="cmnt">
           <input type="button" value="addcmt">
</div>

<div id="add_successful" style="display: none;">Commentara e dobaven uspeshno!</div>

<div id="all_comments">

<? while ( $r = mysql_fetch_assoc() ) : ?>
<div> Napisano ot : <?=$r[name]?>  ,text : <?=$r[text]?></div>
<? endwhile ;?>

</div>


<script>
 $("#addcmt").click(function() {
  var text = $("#cmnt").val();
	if ( text != '' )
		{
		$.post( 'add_cmt.php', { text: text }, function(data) 
			{	
			$("#all_comments").prepend('<div> Napisano ot : Mene  ,text : ' + text + '</div>');
			$("#add_successful").show();
			setTimeout(function() { $("#add_successful").hide(); } , 3000);
			});
		}
 });
</script>

Трябва ти и файл add_cmt.php:
PHP:
<?
//mysql connect
$text = $_POST['text'];
mysql_query("INSERT INTO asdas (`by`,`text`) VALUES('$user','$text')");
?>
 
Забравих да спомена, че работя с codeigniter. Сетих се, че най-вероятно ще трябва някъде да деларирам ид-то на формата. Сега пиша от таблета, но утре ще пробвам. Иначе варианта, който сън избрал изглежда доста добре и ми харесва, но защо не праща заявката..
 
tedo96 каза:
Забравих да спомена, че работя с codeigniter. Сетих се, че най-вероятно ще трябва някъде да деларирам ид-то на формата. Сега пиша от таблета, но утре ще пробвам. Иначе варианта, който сън избрал изглежда доста добре и ми харесва, но защо не праща заявката..
Аз също работя с framework и изпраща заявката към метод от контролера t.e. вместо към add_cmt.php -> statii/addcmt.
Ako махнеш return false би трябвало да я изпраща
 
Когато няма return false си добавя коментара, но не се появява съобщението. Също така не ми работи и проверката за валидация, когато го махна... Смисъл при самото писане си работят, но когато се натисне субмит бутона, за да се прати попринцип ако има грешка не трябва да се прати, а да си извади грешките, а така се праща и вече ми показва грешките, които се гледат с php проверка.


[js]function validateForm(){
var send_message = true;

if (jQuery("textarea#message").val().length < 2) {
jQuery("label#message_error").slideDown();
jQuery("textarea#message").focus();
send_message = false;
}
if (!validateEmail(jQuery("input#email").val())) {
jQuery("label#email_error").slideDown();
jQuery("input#email").focus();
send_message = false;
}
if (jQuery("input#name").val().length < 2) {
jQuery("label#name_error").slideDown();
jQuery("input#name").focus();
send_message = false;
}
return send_message;
}[/js]
 
relax4o каза:
return false го сложи в самия event. Пример: onClick="validateFrom(); return false;"
В скрипта си не ползвам такива евенти. Сложих го на формата, но така си добавя без да се появява съобщението или пък ако не попълня някое от полетата ми се показва динамично грешката, но се рефрешва страницата и ме праща в друга, в която извеждам грешката, че не са попълнени полетата (php проверката). Надявам се, че си разбрал, защото го описах доста зле...
 
relax4o каза:
А какво става, когато сложиш в блока на if(validateForm()) накрая return true; ?
Това ли имаш предвид?
[js] jQuery("form#comments_form").submit(function() {
if(validateForm()){
jQuery('#comments_form').slideUp('slow', function(){
jQuery(this).html("<div id='confirmation'></div>");
jQuery('#confirmation').html("<h4>Коментарът е добавен успешно!</h4>")
.append("<p>Благодарим Ви за изказаното мнение.</p>");
Cufon.refresh();
jQuery(this).slideDown('slow');
setInterval("location.reload();",3000);
})
return true;
}
return false;
});[/js]
Така си ми прави проверките, при грешка си ми ги извежда както трябва, добавя си в базата данни, но при добавянето не ми извежда съобщението...
Направо не мога да повярвам, че толкова време се мъча с този код.. ;х
 
А защо не подаваш този евънт на самия бутон? Няма ли възможност? Или пробвай да сложиш else { return false } и да махнеш return true от if блока.
 
relax4o каза:
А защо не подаваш този евънт на самия бутон? Няма ли възможност? Или пробвай да сложиш else { return false } и да махнеш return true от if блока.
И това го пробвах... ;х Така ми изпраща данните към базата, но не ми вади съобщението...
 
А добре, защо първо създаваш div с id и после след него добавяш информация вътре?

И я тествай validateForm() отделно и провери дали там няма проблем.
 
Всякакви неща пробвах и не мога да го направя... Направо се отчаях от JS уменията ми. :D
Ако някой разбере къде е проблема и ми даде направо кода ще съм му адски благодарен. :D
 
Защо не пробваш първо да си правиш проверките и ако всичко е ок, тогава да изпращаш. ако #submit_button ти е бутона за събмит:

jQuery("#submit_button").click(function() {
if(validateForm()){
jQuery('#comments_form').slideUp('slow', function(){
jQuery(this).html("<div id='confirmation'></div>");
jQuery('#confirmation').html("<h4>Коментарът е добавен успешно!</h4>")
.append("<p>Благодарим Ви за изказаното мнение.</p>");
Cufon.refresh();
jQuery(this).slideDown('slow');
setInterval("$('#comments_form').submit();",3000);
})
return true;
}
return false;
});
 
nbacool2 каза:
Защо не пробваш първо да си правиш проверките и ако всичко е ок, тогава да изпращаш. ако #submit_button ти е бутона за събмит:

jQuery("#submit_button").click(function() {
if(validateForm()){
jQuery('#comments_form').slideUp('slow', function(){
jQuery(this).html("<div id='confirmation'></div>");
jQuery('#confirmation').html("<h4>Коментарът е добавен успешно!</h4>")
.append("<p>Благодарим Ви за изказаното мнение.</p>");
Cufon.refresh();
jQuery(this).slideDown('slow');
setInterval("$('#comments_form').submit();",3000);
})
return true;
}
return false;
});


Той ще натисне бутона, ще направи проверка, ще изкара текста, ама не е ясно дали самата форма ще се submit-не така.
 
relax4o каза:
nbacool2 каза:
Защо не пробваш първо да си правиш проверките и ако всичко е ок, тогава да изпращаш. ако #submit_button ти е бутона за събмит:

jQuery("#submit_button").click(function() {
if(validateForm()){
jQuery('#comments_form').slideUp('slow', function(){
jQuery(this).html("<div id='confirmation'></div>");
jQuery('#confirmation').html("<h4>Коментарът е добавен успешно!</h4>")
.append("<p>Благодарим Ви за изказаното мнение.</p>");
Cufon.refresh();
jQuery(this).slideDown('slow');
setInterval("$('#comments_form').submit();",3000);
})
return true;
}
return false;
});


Той ще натисне бутона, ще направи проверка, ще изкара текста, ама не е ясно дали самата форма ще се submit-не така.
И аз му бях предложил този вариант и не стана.
@relax4o, би ли обяснил защо не е сигурно, че формата ще се submit-не?
Нали се прави проверка за валидация и след това се използва .submit(), не виждам къде може да има проблем?
 
nbacool2 каза:
Защо не пробваш първо да си правиш проверките и ако всичко е ок, тогава да изпращаш. ако #submit_button ти е бутона за събмит:

jQuery("#submit_button").click(function() {
if(validateForm()){
jQuery('#comments_form').slideUp('slow', function(){
jQuery(this).html("<div id='confirmation'></div>");
jQuery('#confirmation').html("<h4>Коментарът е добавен успешно!</h4>")
.append("<p>Благодарим Ви за изказаното мнение.</p>");
Cufon.refresh();
jQuery(this).slideDown('slow');
setInterval("$('#comments_form').submit();",3000);
})
return true;
}
return false;
});
За сега всичко си работи с този код. :)

PS: setInterval-а не работи както трябва...
 

Back
Горе